Answers:
当您使用一个const字符串,编译器嵌入字符串的值在编译时。
因此,如果const在其他程序集中使用一个值,然后更新原始程序集并更改该值,则另一个程序集将在您重新编译之前看不到更改它。
一个static readonly字符串是都在运行时抬头正常现场。因此,如果在其他程序集中更改了字段的值,则在程序集加载后即会看到更改,而无需重新编译。
这也意味着static readonly字符串可以使用非常量成员,例如Environment.UserName或DateTime.Now.ToString()。一个const字符串,只能使用其他常量或文字进行初始化。
另外,static readonly可以在静态构造函数中设置字符串。一个const字符串只能是初始化内联。
请注意,static string可以修改;您应该static readonly改用。
const应仅用于常量-常量在于值永远,永远,永远改变。
private const了严格来说不是常量的值;基本上,它被滥用const于微优化目的。我将坚持我的“永无止境”声明,即使这使我成为伪君子。;)
这是优点和缺点的良好分类:
因此,似乎应该在不太可能更改该值或没有外部应用程序/库使用该常量的情况下使用常量。当需要运行时计算或外部使用者是一个因素时,应使用静态只读字段。
OQ被问及static stringVS const。两者都有不同的用例(尽管都被视为静态)。
仅将const用于真正恒定的值(例如光速-但这甚至取决于介质而变化)。制定此严格指南的原因是,将const值替换为引用它的程序集中const的用法,这意味着如果const更改其定义位置(即,它不应该是一个常量),则可能会出现版本问题。毕竟)。请注意,这甚至会影响private const字段,因为您可能在不同的程序集中具有基类和子类,并且私有字段是继承的。
静态字段与它们在其中声明的类型相关。它们用于表示对于给定类型的所有实例都必须相同的值。可以将这些字段写入任意多次(除非指定了只读)。
如果您的意思是static readonlyvs const,那么我建议static readonly在几乎所有情况下都使用它,因为它可以为以后提供更多证据。