2010-07-27 59 views
1

這裏有3個場景:聲明並在代碼中創建變量背後

namespace NS 
{ 
    public partial class A: System.Web.UI.UserControl 
    private Variable v; 
    protected void Page_Load(object sender, EventArgs e){ 
     if (!Page.IsPostBack) v= new Variable(); 
     .... 
    } 
} 

namespace NS 
{ 
    public partial class A: System.Web.UI.UserControl 
    private Variable v = new Variable(); 
    protected void Page_Load(object sender, EventArgs e){ 
    } 
} 

namespace NS 
{ 
    public partial class A: System.Web.UI.UserControl 
    private Variable v; 
    protected void Page_Load(object sender, EventArgs e){ 
     v = new Variable(); 
    } 
} 

什麼時候變量「v」被創建,每次爲2號方案?第2場景等同於第3場景嗎?

+0

請注意,如果您想在回發之間保留v的值(因爲現在每次都會被清除),您可能需要考慮使用將值保存在視圖狀態中的屬性。 – earthling 2010-07-27 15:51:39

回答

2

場景1: 變量v在每次請求時初始化,發生頁面加載時,並且沒有回發。 (否則爲空)

場景2: 變量v在類A的每個實例化中初始化,並且調用構造函數。

方案3: 變量v是在發生頁面加載時對每個請求初始化的。

評論: 如果您僅在頁面加載發生後才訪問變量v,則方案2 & 3可以被視爲相等。

+0

對於提示v在提示背景上的方案1中爲零爲+1。這是一個重要的區別。 – earthling 2010-07-27 15:48:48

0

在您的示例的變量始終有在相同的點,它是類A的私有成員

初始化點是你的實施例1,2之間的差,和第3

在例子1中,如果沒有其他呼叫,則v在任何時候都將爲空。

在例如兩個,V將盡快類A被引用

在例如三個包含到一個默認的「可變」對象的引用,V將是空的,直到在Page_Load呼叫然後將包含對一個參考之後是默認的「變量」對象。

0

「創建頁面對象時必須在對象的任何事件或方法可以調用之前創建。」和「Sort-of。創建延遲了第三個更長的時間」