C#中的const和readonly有什么区别?

C#中的const和readonly有什么区别

你什么时候会用一个来代替另一个

除了

  • 必须在定义常量时声明值VS只读值可以动态计算,但需要在构造函数退出前赋值。。之后它就被冻结了
  • 常量是隐式的静态的。您可以使用ClassName.ConstantName符号来访问它们

有一个微妙的区别。考虑一个在汇编语言> /代码>中定义的类。

公共类Const\u V\u只读
{
公共常数int I_const_VALUE=2;
公共只读输入值;
公共Const_V_Readonly()
{
I_RO_值=3;
}
}

AssemblyB引用AssemblyA并在代码中使用这些值。编译时:

  • 对于const值,它类似于查找替换。值2被“烘焙”到程序集B的IL中。这意味着如果明天我将I_CONST_VALUE更新为20,AssemblyB在我重新编译它之前仍然有2个
  • 只读值的情况下,它类似于内存位置的ref。该值未烘焙到AssemblyB的IL中。这意味着,如果内存位置已更新,AssemblyB将在不重新编译的情况下获取新值。因此,如果I_RO_值更新为30,则只需构建AssemblyA,而无需重新编译所有客户端

因此,如果您确信常量的值不会改变,请使用常量

公用工程单位厘米米=100;

但是如果你有一个可能改变的常数(例如w.r.t.精度)。。或者,如果有疑问,请使用只读

公共只读浮点PI=3.14;

更新:Aku需要被提及,因为他首先指出了这一点。我还需要插入我学到这一点的地方:有效的C#-比尔·瓦格纳

发表评论