2011-06-22 54 views
1

這是我前一個問題的後續內容。我接受了會員的建議,一切正常。但現在當我想要另一個構造函數時,我遇到了一個我以前沒有遇到的問題。這是我現在有:添加一個新的構造函數到我的ParentDetail類?

public class Parent { 

    public Parent() { this._parentDetails = new List<ParentDetail>(); } 
    public IList<ParentDetail> ParentDetails { get { return _parentDetails; } } 
    private List<ParentDetail> _parentDetails; // = new List<ParentDetail>(); 

    public Parent(int count) { 
     for (int i = 0; i < count; i++) { 
     ParentDetails.Add(new ParentDetail{ 
      Id = i + 1 
     }); 
    } 

當我調用類與一些在「父(詮釋計數)」,那麼它失敗,並告訴我ParentDetails的實例爲null。我必須這樣做,以便默認的構造函數被調用,還是我需要在新的構造函數中手動創建一個ParentDetail實例?

回答

-2
public Parent(int count) : this() { 
    for (int i = 0; i < count; i++) { 
     ParentDetails.Add(new ParentDetail{ 
      Id = i + 1 
     }); 
    } 
} 

調用new()調用默認的構造函數。如果你想打電話從Parent()構造的Parent(int count)構造(例如與count默認值),你可以調用同樣this(1)

如果你在繼承的類這樣做,你可以調用base()

作爲一個經驗法則,我建議你把儘可能在一個構造函數,可以採取一切可能的參數,然後有少走參數和提供缺省值其他構造函數,調用它。

例如爲:

public Parent() : this(5) { } 

public Parent(int count) : this() { 
    this._parentDetails = new List<ParentDetail>(); 
    for (int i = 0; i < count; i++) { 
     ParentDetails.Add(new ParentDetail{ 
      Id = i + 1 
     }); 
    } 
} 
+0

-1:?'新的()'..不是有效的C# –

+0

這是在C#語法錯誤 - 你的意思是一些其他語言 –

+0

@mdm你的意思是我應該居然把新的()的字樣;?還有,你把他們給了我一個語法錯誤 – JonAndMarie

1

你可以做任何的你提到

我想調用默認的構造函數是一個更好一點,因爲你可能在以後添加更多的東西給它,它會自動地反映這兩個選項之一,加上它降低代碼redundency:

public Parent(int count) : this() { 
    for (int i = 0; i < count; i++) { 
    ParentDetails.Add(new ParentDetail{ 
     Id = i + 1 
    } 
+0

你能給我一個這樣的例子。其他用戶舉了一個例子,但我想錯了語言:-( – JonAndMarie

+0

@TempTemp:我已經做了 –

0
public Parent(int count):this() { 
    for (int i = 0; i < count; i++) { 
     ParentDetails.Add(new ParentDetail{ 
     Id = i + 1 
    }); 
} 
相關問題