2012-03-08 73 views
3

這兩種方法是否有區別?在Getter或構造函數中初始化成員

在這種方法中,我使用的吸氣劑來初始化數據表

public DataTable Res 
{ 
    get 
    { 
     if (Res == null) 
     { 
      Res = GetDataTable(); 
     } 
     return Res ; 
    } 
    private set; 
} 

在這種方法中,我使用的構造函數初始化該數據表

public class XYZ 
{ 
    public DataTable Res{ get; private set;} 
    //constructor 
    public XYZ() 
    { 
     Res= GetDataTable();    
    } 
} 

這個變量在ASP.net頁面上用於填充DropDown列表。哪個表現會更好?

編輯: -

這是在Web應用程序中使用,其中的數據也不會改變。我將此表綁定到Page_Load事件中的下拉列表中。

回答

1

問題是XYZ類的給定實例是否總是需要並使用DataTable

如果沒有,那麼你會想懶惰初始化(使用你的getter),以避免無功而返。

如果你總是需要它,那麼接下來的問題是在類的實例化和對屬性的調用之間是否存在潛在的實質性延遲。如果是這樣,那麼在實例化時加載數據可能意味着你的數據比如果你等待直到屬性獲取器被調用時會更加陳舊。

另一方面,這不一定適用於Web場景,但在其他應用程序中,人們會想要考慮對該屬性的調用是否需要高度響應以防止UI凍結。在這種情況下,預加載數據可能更可取。

+0

這用於數據不會更改的Web應用程序中。我將此表綁定到Page_Load事件中的下拉列表中。 – Quantbuff 2012-03-08 01:47:13

0

是的,是有區別的。第一種方法稱爲lazy instantiation,意思是等到對象被實例化之前使用。這樣做的好處在於,您需要等待最後一秒才能使用設置對象所需的內存和處理器。

第二種方法在您創建類後立即實例化該對象。這樣做的缺點是,如果您從不使用該對象,那麼您浪費了在分配對象時創建對象和內存的時間。

+0

謝謝!這是很快我甚至沒有完成鍵入我的問題:) – Quantbuff 2012-03-08 01:36:55

+0

只需注意,如果您使用DataTable每次性能差異是沒有或可以忽略不計。 – Servy 2012-03-08 01:38:13

+0

謝謝。這是我的後續問題,因爲我知道我將始終使用此數據表,因爲我正在填充頁面加載時的下拉列表 – Quantbuff 2012-03-08 01:41:07

相關問題