C# ASP.Net Webforms - 字符串 - 静态与静态只读

Mig*_*Mig 5 c# asp.net

关于在 ASP.Net 应用程序中使用这些变量,我遇到了一些困惑。

public static string Complete = "Complete";

据我所知,这个值对于所有用户都是全局的,但是由于应用程序池回收并且该值没有在回收时分配,所以不能保证该值存在?

public static readonly string Complete = "Complete";

该readonly标志是否意味着由于使用类的静态构造函数初始化该值始终可用,这意味着该值将始终可用?

据我所知,在这种readonly情况下会发生以下情况:

  1. 访问变量
    • 类是构造的吗?不?分配变量
  2. 应用程序重启
  3. 前往 1

readonly和非只读版本之间有什么区别吗?我想我们也可以这样写来保证变量:

public static string Complete { get { return "Complete"; } }

Ada*_*rth 5

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更适合。