const和readonly有什么区别?
const
和readonly
之间有什么区别,你使用一个吗?
除了明显的区别之外
const
时声明值VS readonly
值可以动态计算,但需要在构造函数退出之前分配..在此之后它被冻结。 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;
更新:阿库需要提一提,他首先指出了这一点。 此外,我需要插入的地方,我了解到这一点..有效的C# - 比尔瓦格纳
与consts有一个陷阱! 如果您从另一个程序集中引用常量,则其值将被编译到调用程序集中。 这样,当你更新引用程序集中的常量时,它在调用程序集中不会改变!
常量
只读实例字段
静态只读字段
上一篇: What is the difference between const and readonly?
下一篇: sizeof(int) on x64?