C#中const和static readonly的区别

在使用上,两者都是静态调用,都是只读,那区别是什么呢
const:引用const值的代码在编译成IL代码后,该值是被直接写入IL代码中的。例如A编写了个a.dll,里面有定义了一个const值v = 10。然后你引用了a.dll的v来编写你的代码并导出了一个新的dll名为b.dll。之后A将v的值修改为了100并重新导出了a.dll,这时如果你不重新编译b.dll的话,b.dll里的代码仍将使用旧的v的值。此外,因为const值是被直接编入代码中,所以不会占用内存,但只能适用于值类型。
static readonly:使用static readonly的值是运行时动态生成的,所以不会出现像const那样需要重新编译的情况。但是static readonly的值会占用内存。不过适用的范围不仅是值类型,还可以是对象类型。另外static readonly的值只能在构造函数内被初始化,或者在定义时直接初始化。

Tags: