0

這可能是Asp.net Static Variable Life time Across Refresh and PostBack的可能重複,但我的查詢有點不同。asp.net:每次有回發到頁面時,都會調用靜態構造函數嗎?

我有一個網頁的應用程序,即default.aspx。我有一個靜態構造函數和一個靜態屬性「MyProperty」的公共靜態類「MyClass」,該類在default.aspx.cs類之外。

靜態類的屬性在頁面加載和單擊按鈕時分配。

現在,我知道一個類型的靜態構造函數只會在類的任何屬性被調用或賦值時才被調用一次。這是根據AppDomain。之後,靜態構造函數將永遠不會被調用。

我也知道,一個應用程序域是一個.NET構造,它提供了一個過程中加載的程序集集之間的隔離層。

所以我的問題這裏有

  1. 可能有人請詳細說明AppDomain在asp.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; 
    } 
} 

回答

1

我覺得這頁What ASP.NET Programmers Should Know About Application Domains做了解釋應用程序域的一個不錯的工作。

靜態構造函數只會被調用一次,而不是每次回發(如您所見),我不相信您應該期望基於瀏覽器或IIS的任何不同行爲。

+0

優秀的文章!謝謝,它清除了我所有的疑慮(暫時):) – samar

0

應用程序域在這裏並不真正相關。但是,如果你的好奇心正在殺死你:http://msdn.microsoft.com/en-us/library/ms173138(v=vs.80).aspx

事實上,靜態構造函數將被稱爲零次或一次;但從來沒有更多,每運行任何應用程序。

靜態構造函數在應用程序運行時第一次引用類時調用。除非您重新啓動應用程序,否則它將不會再被調用。如果這個類從來沒有使用過,靜態構造函數將永遠不會被調用。

所以基本上,你在你的問題中描述的行爲是非常有意義的。頁面對象每次都會重載,但靜態構造函數只會被調用一次。

相關問題