除了明显的区别
- 可以在定义
const
VSreadonly
值时声明值,该值可以动态计算,但需要在构造函数退出之前分配。在冻结之后。 - ‘const’是隐式的
static
。您使用一种ClassName.ConstantName
符号来访问它们。
有细微的差别。考虑在中定义的类
AssemblyA。
public class Const_V_Readonly{ public const int I_CONST_VALUE = 2; public readonly int I_RO_VALUE; public Const_V_Readonly() { I_RO_VALUE = 3; }}AssemblyB``AssemblyA在代码中引用并使用这些值。编译后,
- 在
const
值的情况下,就像是一个查找替换,值2被“烘焙”到AssemblyB
IL中。这意味着如果明天我将I_CONST_VALUE
在未来更新到20。AssemblyB
在我重新编译之前仍然有2个。 - 在该
readonly
值的情况下,它类似于ref
存储位置。该值未烘焙到AssemblyB
的IL中。这意味着如果内存位置已更新,AssemblyB
则无需重新编译即可获取新值。因此,如果I_RO_VALUE
将其更新为30,则只需要构建即可AssemblyA
。不需要重新编译所有客户端。
因此,如果您确信常量的值不会改变,请使用
const。
public const int CM_IN_A_METER = 100;
但是,如果您有一个可能会更改的常量(例如,精度),或者有疑问,请使用
readonly。
public readonly float PI = 3.14;
更新:Aku需要得到提及,因为他首先指出了这一点。 另外,我需要在我学到的知识上加点文字。. 有效的C#-Bill
Wagner



