一尘不染

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

c#

constreadonly C#和有什么不一样?

您什么时候可以使用另一个?


阅读 205

收藏
2020-05-19

共1个答案

一尘不染

除了明显的区别

  • 可以在定义constVS readonly值时声明值,该值可以动态计算,但需要在构造函数退出之前分配。在冻结之后。
  • ‘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被“烘焙”到AssemblyBIL中。这意味着如果明天我将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

2020-05-19