'const string' vs. 'static readonly string' 在C#中的区别

17 浏览
0 Comments

'const string' vs. 'static readonly string' 在C#中的区别

这个问题已经在此处有答案了:\'Static readonly\' vs. \'const\'

在C#中,

static readonly string MyStr;

const string MyStr;

有什么区别?

admin 更改状态以发布 2023年5月22日
0
0 Comments

下面是一篇关于使用常量和静态只读字段的利弊的好文章.

关键点:

从高层次上看,常量在编译时处理,
而静态只读字段的值在运行时计算。

编译器替换常量值的事实意味着
如果常量值发生改变,则引用常量值的任何库/程序集
均需要重新编译。引用静态只读字段的库
将引用该字段而不是其值,因此它们将在不需要重新编译的情况下捕捉到字段的任何更改。

因此,似乎应将常量用于极不可能更改值的情况,或者如果没有外部应用程序/库使用该常量。应该使用静态只读字段,当需要在运行时计算时,或者如果有外部使用者。

0
0 Comments

当你使用一个const字符串时,编译器会将字符串的值在编译时嵌入。
因此,如果你在另一个程序集中使用const值,然后更新原始程序集并更改值,其他程序集将不会看到该更改,直到重新编译。

static readonly字符串是一个普通的字段,在运行时查找。因此,如果在另一个程序集中更改了字段的值,加载程序集时将立即看到更改,无需重新编译。

这也意味着,static readonly字符串可以使用非常量成员,例如Environment.UserNameDateTime.Now.ToString()。一个const字符串只能使用其他常量或文字初始化。
另外,static readonly字符串可以在静态构造函数中设置;const字符串只能在内联中初始化。

请注意,static string可以被修改;你应该使用static readonly替代。

0