这可能是Asp.net Static Variable Life time Across Refresh and PostBack的可能重复,但我的查询有点不同。
我有一个带有页面的web应用程序,即default.aspx。我有一个公共静态类“MyClass”,带有静态构造函数和静态属性“MyProperty”,该类在default.aspx.cs类之外。
静态类的属性是在页面加载和按钮单击时分配的。
现在,我知道只要调用或分配了类的任何属性,类型的静态构造函数就会被调用一次。这是AppDomain
。之后,永远不会调用静态构造函数。
我也知道应用程序域是一个.NET构造,它在进程中加载的程序集集之间提供了一层隔离。
所以我的问题是
AppDomain
吗?任何相关链接也会有所帮助。我尝试通过在静态构造函数上保留断点来调试代码。第一次加载页面时断点被点击,但是当我点击按钮时断点没有。但我不确定在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;
}
}
答案 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
事实是,静态构造函数将被调用为零次或一次;但每次运行任何应用程序都不会更多。
当应用程序运行时,第一次引用类时会调用静态构造函数。除非您重新启动应用程序,否则永远不会再次调用它。如果从未使用过类,则永远不会调用静态构造函数。
所以基本上,你在问题中描述的行为非常有意义。页面对象每次都会重新加载,但静态构造函数只会被调用一次。