Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net:是否每次回发到页面时都会调用静态构造函数?_Asp.net_Static_Static Classes_Static Constructor_Static Class - Fatal编程技术网

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

asp.net:是否每次回发到页面时都会调用静态构造函数?,asp.net,static,static-classes,static-constructor,static-class,Asp.net,Static,Static Classes,Static Constructor,Static Class,这可能是的重复,但我的查询有点不同 我有一个网页名为default.aspx的web应用程序。我有一个带有静态构造函数和静态属性“MyProperty”的公共静态类“MyClass”,该类在default.aspx.cs类之外 静态类的属性是在页面加载和单击按钮时分配的 现在,我知道,每当调用或分配类的任何属性时,类型的静态构造函数只会被调用一次。这是根据AppDomain。之后,静态构造函数将永远不会被调用 我还知道应用程序域是一个.NET构造,它在进程中加载的程序集之间提供了一个隔离层 所以

这可能是的重复,但我的查询有点不同

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

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

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

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

所以我的问题是

  • 有人能详细介绍一下asp.net方面的
    AppDomain
    ?任何相关链接也会有所帮助
  • 我知道页面对象在每次回发时都会被创建和销毁。那么,对于下面的代码,静态构造函数会在每次回发时调用吗
  • 我试图通过在静态构造函数上保留断点来调试代码。第一次加载页面时,断点被击中,但当我单击按钮时,断点没有击中。但我不确定当托管在IIS上时,这是否会以同样的方式工作,所以我想获得一些专家的意见。浏览器是IE10

    请让我知道,如果我没有框架的任何句子正确或陈述的东西错了

    提前谢谢

    问候,

    撒马尔

    我认为这个页面在解释应用程序域方面做得相当好


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

    应用程序域在这里并不真正相关。但是,如果你的好奇心正在扼杀你:

    事实是,静态构造函数要么被调用零次,要么被调用一次;但每次运行任何应用程序时,都不能超过此值

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


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

    优秀文章!非常感谢,它消除了我所有的疑虑(暂时):)
    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;
        }
    }