asp.net:每次回页到页面时都会调用静态构造函数吗?

时间:2013-08-01 13:08:36

标签: asp.net static static-classes static-constructor static-class

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

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

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

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

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

所以我的问题是

  1. 有人可以根据asp.net详细说明AppDomain吗?任何相关链接也会有所帮助。
  2. 我知道每个回发都会创建和销毁页面对象。那么,对于下面的代码,每次有回发时都会调用静态构造函数吗?
  3. 我尝试通过在静态构造函数上保留断点来调试代码。第一次加载页面时断点被点击,但是当我点击按钮时断点没有。但我不确定在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;
        }
    }
    

2 个答案:

答案 0 :(得分:1)

我认为此页面What ASP.NET Programmers Should Know About Application Domains可以很好地解释应用程序域。

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

答案 1 :(得分:0)

App域在这里并不重要。但如果你的好奇心在扼杀你:http://msdn.microsoft.com/en-us/library/ms173138(v=vs.80).aspx

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

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

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