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?
