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

时间:2011-11-02 09:19:45

标签: c# asp.net

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

public static string Complete = "Complete";

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

public static readonly string Complete = "Complete";

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

据我所知,readonly场景中会发生以下情况:

  1. 访问变量
    • 是否构建了类?没有?分配变量
  2. 应用程序重新启动
  3. 转到1
  4. readonly和非只读版本之间有什么区别吗?我想我们也可以按如下方式编写它来保证变量:

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

3 个答案:

答案 0 :(得分:4)

readonly只会在初​​始化后停止变量所保持的值。它不会影响静电的使用寿命 - 它仍然和以前一样。

请注意,如果静态是引用,readonly属性不会阻止底层对象发生变异,它只会阻止静态变量的值被更改 - 在类引用的情况下,那个值就是参考本身。

MSDN C#docs readonly:

http://msdn.microsoft.com/en-us/library/acdd6hb7(v=VS.100).aspx

当您谈到具有全局不变的值时,readonly静态将对const具有类似的影响(假设您正在使静态的事物对const来说是可以忽略的)。当您第一次尝试访问静态时,它将在现场初始化,永远不允许更改。

所以:

public static readonly string Something = "what";

实际上会表现得像:

public const string Something = "what";

虽然后者是编译时常量,而前者不是 - 所以它的行为有一些关键的区别。我更多的是谈论全球可用价值不会改变的想法。

在ASP.NET和静态回收方面,readonly static和const之间的区别在于,如果尚未初始化,静态只会产生初始化的费用。但是,对于所描述的用法,const更适合。

答案 1 :(得分:0)

  

public static string Complete =“Complete”;

有保证。但它也可以修改。如果您希望它是常量,请使用 const

更多信息abot const vs readyonly vs static readonly Here

答案 2 :(得分:0)

readonly关键字告诉编译器这个类变量只能与其声明或它的c'tor一起初始化(因为它是一个静态字段,这两个选项无论如何都是等价的。)

除此之外,没有其他区别。

HTH - 托马斯