关于在 ASP.Net 应用程序中使用这些变量,我遇到了一些困惑。
public static string Complete = "Complete";
据我所知,这个值对于所有用户都是全局的,但是由于应用程序池回收并且该值没有在回收时分配,所以不能保证该值存在?
public static readonly string Complete = "Complete";
该readonly标志是否意味着由于使用类的静态构造函数初始化该值始终可用,这意味着该值将始终可用?
据我所知,在这种readonly情况下会发生以下情况:
readonly和非只读版本之间有什么区别吗?我想我们也可以这样写来保证变量:
public static string Complete { get { return "Complete"; } }
readonly一旦初始化,将简单地停止由变量保存的值。它不会影响静电的寿命 - 它仍然和以前一样。
请注意,如果静态是引用,则该readonly属性不会阻止底层对象发生变异,它只会阻止静态变量的值被更改 - 在类引用的情况下,该值是引用本身。
只读 MSDN C# 文档:
http://msdn.microsoft.com/en-us/library/acdd6hb7(v=VS.100).aspx
一个readonly静态也会有类似的影响的const(假设你正在静态是符合使用的东西const),当你谈论拥有一个全球不变的值。当您第一次尝试访问静态时,它将被当场初始化并且永远不允许更改。
所以:
public static readonly string Something = "what";
Run Code Online (Sandbox Code Playgroud)
实际上会像这样:
public const string Something = "what";
Run Code Online (Sandbox Code Playgroud)
虽然后者是编译时间常数,而前者不是 - 所以它的行为有一些关键的区别。我更多地谈论的是全球可用的价值不会改变的想法。
在 ASP.NET 和静态资源的回收方面,只读静态和常量之间的区别在于静态如果尚未初始化,则只会产生初始化费用。然而,对于所描述的用法,const更适合。