'const string' vs. 'static readonly string' 在C#中的区别
'const string' vs. 'static readonly string' 在C#中的区别
这个问题已经在此处有答案了:\'Static readonly\' vs. \'const\'
在C#中,
static readonly string MyStr;
和
const string MyStr;
有什么区别?
admin 更改状态以发布 2023年5月22日
关键点:
从高层次上看,常量在编译时处理,
而静态只读字段的值在运行时计算。
和
编译器替换常量值的事实意味着
如果常量值发生改变,则引用常量值的任何库/程序集
均需要重新编译。引用静态只读字段的库
将引用该字段而不是其值,因此它们将在不需要重新编译的情况下捕捉到字段的任何更改。
和
因此,似乎应将常量用于极不可能更改值的情况,或者如果没有外部应用程序/库使用该常量。应该使用静态只读字段,当需要在运行时计算时,或者如果有外部使用者。
当你使用一个const
字符串时,编译器会将字符串的值在编译时嵌入。
因此,如果你在另一个程序集中使用const
值,然后更新原始程序集并更改值,其他程序集将不会看到该更改,直到重新编译。
static readonly
字符串是一个普通的字段,在运行时查找。因此,如果在另一个程序集中更改了字段的值,加载程序集时将立即看到更改,无需重新编译。
这也意味着,static readonly
字符串可以使用非常量成员,例如Environment.UserName
或DateTime.Now.ToString()
。一个const
字符串只能使用其他常量或文字初始化。
另外,static readonly
字符串可以在静态构造函数中设置;const
字符串只能在内联中初始化。
请注意,static string
可以被修改;你应该使用static readonly
替代。