在C#中,有什么区别
static readonly string MyStr;
Run Code Online (Sandbox Code Playgroud)
和
const string MyStr;
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 154
当您使用一个const
字符串,编译器嵌入字符串的值在编译时.
因此,如果const
在其他程序集中使用值,然后更新原始程序集并更改该值,则在重新编译之前,其他程序集将不会看到更改.
一个static readonly
字符串是都在运行时抬头正常现场.因此,如果在不同的程序集中更改了字段的值,则只要加载程序集就会看到更改,而不进行重新编译.
这也意味着static readonly
字符串可以使用非常量成员,例如Environment.UserName
或DateTime.Now.ToString()
.一个const
字符串,只能使用其他常量或文字进行初始化.
另外,static readonly
可以在静态构造函数中设置字符串; 一个const
字符串只能初始化内联.
注意a static string
可以修改; 你应该用static readonly
.
cdi*_*die 11
快速回答 :
public const string MyStr;
Run Code Online (Sandbox Code Playgroud)
是编译时常量(例如,您可以将它用作方法参数的默认参数),如果您使用此类技术,它将不会被混淆
public static readonly string MyStr;
Run Code Online (Sandbox Code Playgroud)
是运行时常量,它意味着它在应用程序启动时而不是之前进行评估.这就是为什么它不能用作方法(编译错误)的默认参数.存储在其中的值可以进行模糊处理
OQ被问及static string
VS const
.两者都有不同的用例(尽管两者都被视为静态).
仅将const用于真正恒定的值(例如光速 - 但即使这取决于介质也是如此).这个严格的准则的原因是const值被替换为引用它的程序集中const的使用,这意味着如果const在其定义位置发生变化(即它不应该是一个常量),你可以有版本问题毕竟).请注意,这甚至会影响private const
字段,因为您可能在不同的程序集中具有基类和子类,并且继承了私有字段.
静态字段与它们在其中声明的类型相关联.它们用于表示对于给定类型的所有实例需要相同的值.这些字段可以根据需要写入多次(除非指定只读).
如果你的意思是static readonly
vs const
,那么static readonly
几乎所有情况都会推荐,因为它更具有未来性.