关于在 ASP.Net 应用程序中使用这些变量,我遇到了一些困惑。
public static string Complete = "Complete";
据我所知,这个值对所有用户都是全局的,但由于应用程序池回收,这个值不能保证存在,而且这个值没有在回收时分配?
public static readonly string Complete = "Complete";
readonly
标志是否意味着由于使用类的静态构造函数进行初始化,该值始终可用,这意味着该值将始终可用?
据我所知,在 readonly
场景中会发生以下情况:
- 访问变量
- 是否构建了类?不?分配变量
- 应用重启
- 转到 1
readonly
和非readonly 版本有什么区别吗?我想我们也可以这样写来保证变量:
public static string Complete { get { 返回“完成”; }
最佳答案
readonly
将在初始化后简单地停止被更改的变量所持有的值。它不会影响静态的生命周期 - 它仍然和以前一样。
请注意,如果 static 是一个引用,readonly
属性不会阻止底层对象发生变异,它只会阻止静态变量的值被更改 - 在这种情况下类引用,该值是引用本身。
关于只读的 MSDN C# 文档:
http://msdn.microsoft.com/en-us/library/acdd6hb7(v=VS.100).aspx
readonly
static 将对 const
产生类似的影响(假设您正在制作静态的东西适用于 const
)当您谈论具有全局不变的值(value)。当您第一次尝试访问静态时,它将当场初始化并且永远不允许更改。
所以:
public static readonly string Something = "what";
实际上会像这样:
public const string Something = "what";
尽管后者是编译时间常量,而前者不是——所以它的行为有一些关键的区别。我更多地是在谈论一种在全局范围内可用且不会改变的值(value)的想法。
在 ASP.NET 和静态回收方面,readonly static 和 const 之间的区别在于,如果静态还没有被初始化,它只会产生初始化的费用。然而,对于所描述的用法,const
更合适。
关于C# ASP.Net Webforms - 字符串 - 静态与静态只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7977985/