1

这可能是Asp.net Static Variable Life time Across Refresh 和 PostBack的重复,但我的查询有点不同。

我有一个网页应用程序,即 default.aspx。我有一个带有静态构造函数和静态属性“MyProperty”的公共静态类“MyClass”,这个类在 default.aspx.cs 类之外。

静态类的属性是在页面加载和按钮单击时分配的。

现在,我知道每当调用或分配类的任何属性时,一个类型的静态构造函数只会被调用一次。这是每AppDomain. 之后,将永远不会调用静态构造函数。

我还知道,应用程序域是一个 .NET 构造,它在进程中加载​​的程序集集之间提供了一层隔离。

所以我的问题是

  1. 有人可以详细说明AppDomainasp.net吗?任何相关链接也将有所帮助。
  2. 我知道页面对象是在每次回发时创建和销毁的。那么,对于下面的代码,会不会每次回发都会调用静态构造函数呢?

我尝试通过在静态构造函数上保留断点来调试代码。第一次加载页面时断点被击中,但当我单击按钮时没有。但我不确定这在 IIS 上托管时是否会以同样的方式工作,所以想获得一些专家意见。浏览器是IE10。

如果我没有正确构筑任何句子或陈述错误,请告诉我。

提前致谢。

问候,

萨马尔

public static class MyClass
{
    public static int MyProperty { get; set; }
    static MyClass()
    { 
    }
}
public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        MyClass.MyProperty = 2;
    }



    protected void Button1_Click(object sender, EventArgs e)
    {
        MyClass.MyProperty = 1;
    }
}
4

2 回答 2

2

我认为这个页面What ASP.NET Programmers Should Know About Application Domains在解释应用程序域方面做得很好。

静态构造函数只会被调用一次,而不是每次回发(如您所见),我认为您不应该期望基于浏览器或 IIS 的任何不同行为。

于 2013-08-01T15:06:10.483 回答
0

应用程序域在这里并不真正相关。但如果你的好奇心害死你: http: //msdn.microsoft.com/en-us/library/ms173138 (v=vs.80).aspx

事实是,静态构造函数要么被调用零次,要么被调用一次;但绝不会更多,每次运行任何应用程序。

当应用程序运行时,第一次引用类时会调用静态构造函数。除非您重新启动应用程序,否则将永远不会再次调用它。如果从不使用该类,则永远不会调用静态构造函数。

因此,基本上,您在问题中描述的行为非常有意义。页面对象每次都会重新加载,但静态构造函数只会被调用一次。

于 2013-08-01T15:06:39.903 回答