如何在内存中分配C#const成员?

rar*_*dev 7 c# memory-management const

问题的标题是自我解释的.我想知道声明的成员是否是const该类的所有实例的单例,或者每个实例都有自己的副本.

我已经阅读了一些问题,const但大多数都是指const方法中的变量.

Tri*_*ian 6

C#常量实现为具有literal公共语言指令结构中的约束的字段.查找ECMA-335 §I.8.6.1.2提供了明确的答案(强调我的):

文字约束承诺该位置的值实际上是内置类型的固定值.该值被指定为约束的一部分.编译器需要用其值替换对该位置的所有引用,因此[Virtual Execution System]不需要为该位置分配空间.此约束虽然在逻辑上适用于任何位置,但只能放在复合类型的静态字段上.如此标记的字段不允许从CIL引用(它们应在编译时内联到它们的常量值),但可以使用直接处理元数据的反射和工具来使用.

所以你要去,const字段的值必须由编译器直接复制到指令流中(通常使用ldc.*指令).它们不存在于可引用的位置,但需要在元数据和反射中可用.它们可以像静态字段一样实现,但不必如此.


Dex*_*ers 2

常量通常是可以在编译时评估的东西,并且编译器可能会用评估值替换它。

Const意味着static(见下面的链接)

常量表达式是可以在编译时完全求值的表达式。因此,引用类型常量的唯一可能值为 string 和 null。

来源:

C# 静态和常量变量内存

C# 中 const 的内存分配

C# const 字段使用更少的内存吗?