在C#中常量和只读之间有什么区别?

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


当前回答

原则上;您可以在运行时将静态只读字段的值分配给非常量值,而常量必须分配给常量值。

其他回答

Const:应用程序生命周期内的绝对常量值。

只读:可以在运行时更改。

我相信常量值对于所有对象都是相同的(并且必须用文字表达式初始化),而只读对于每个实例化可以是不同的。。。

有一个与常量的gotcha!如果从另一个程序集引用常量,则其值将直接编译到调用程序集中。这样,当您更新引用程序集中的常量时,它不会在调用程序集中发生更改!

这说明了这一点。概要:const必须在声明时初始化,readonly可以在构造函数上初始化(因此,根据使用的构造函数,其值不同)。

编辑:关于细微的差异,请参见上面吉树的gotcha

常量必须是硬编码的,其中可以在类的构造函数中设置为只读。