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

标签 c# asp.net

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

public static string Complete = "Complete";

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

public static readonly string Complete = "Complete";

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

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

  1. 访问变量
    • 是否构建了类?不?分配变量
  2. 应用重启
  3. 转到 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/

相关文章:

asp.net - 通过用 NoSQL 替换 SQL Server 来重新构建 ASP.NET 应用程序

javascript - 如何以编程方式更改 OnClientClick 事件并调用它?

c# - FTP 在 C# 中传输期间更改 PGP 文件

c# - 从开头修剪字符串到子字符串c#

c# - 改变物体的颜色而不损害纹理

javascript - 提示下载

c# - 重试之前的任务操作 TPL

c# - 使用正则表达式过滤 MongoDB C# 驱动程序

c# - 文件下载对话框

c# - JavaScript 函数在 C# 中返回 bool 值