2011-03-07 163 views
2

的屬性,因此我有一個名爲FixedSizeList的對象,沒有一個參數的構造函數。對象無參數的構造函數爲

看起來像這樣。

class FixedSizeList<T> 
{ 
    public FixedSizeList(Int32 size) 
    { 
     this.Size = size; 
     this._Array = new T[size]; 
    } 
} 

現在我想用這個對象作爲另一個類的屬性。

public FixedSizeList<Card> CardList { get; set; } 

我注意到我可以用事實來聲明屬性的構造函數。

public new FixedSizeList<Card> CardList { get; set; } 

但問題是,FixedSizeList沒有實例化(我猜是顯而易見的原因)。

所以我不應該要麼得到一個編譯時錯誤(像「申報對象無參數的構造函數」),該代碼或INFACT以某種方式能夠聲明中的屬性參數?

有人能解釋一下是怎麼回事,如果有辦法解決這個問題嗎?(很明顯,我可以在第二個對象的構造函數中完成所有這些,但我正在嘗試查看其他技術)。

回答

9

new放在屬性的前面並不會導致屬性的setter在初始化時被神奇地調用,並且傳遞了該類型的新實例(這對於一個小小的關鍵字來說會有相當大的影響!)

相反,它是用來hide a member with the same name on a base class

如果你想你的財產返回一個新的實例的權利的時候,你需要給它多數民衆贊成初始化的後盾:

public FixedSizeList<Card> CardList 
{ 
    get { return _cardList; } 
    set { _cardList = value; } 
} 

private FixedSizeList<Card> _cardList = new FixedSizeList<Card>(99999999); 
+0

所以你是說在C#中的新關鍵字在這方面更像是一個影子? – 2011-03-07 01:25:05

+0

@Maxim不完全一樣,但類似的是。 – 2011-03-07 01:27:09

+0

哇,VB和C#真的是兩種不同的動物......謝謝你的幫助! – 2011-03-07 01:30:12

0

你想要做的是一個工廠

你需要的東西這將返回一個實例的對象,你的類中的靜態方法

public static FixedListSize GetInstance() { 
    return new FixedListSize(); 
} 

我不記得但如果你必須標記班級爲靜態的,我認爲你可能有至。它逃脫我的那一刻:\

相關問題