2014-12-05 106 views
0

我在圍繞這個問題時遇到了麻煩。我有2個構造函數。第一個有兩個參數:如何使用無參構造函數調用帶有2個參數的構造函數?

public Instrument(string name, string category) 
{ 
    this.Name = name; 
    this.Category = category; 
} 

然後,我有一個默認的(無參數)構造函數常數默認:

public Instrument()    
{ 
    this.Name = DefaultName; 
    this.Category = DefaultCategory; 
} 

我也應該從無參數的構造函數調用2參數的構造函數。我該怎麼做呢?我也質疑爲什麼這甚至是必要的。如果您從默認值調用2參數,您將如何將默認值傳遞給應用程序?所以我想我的主要問題是如何從默認構造函數調用2參數構造函數?

回答

7

通過調用默認的兩個參數的構造函數,傳遞的默認值,比如:

public Instrument() : this(DefaultName, DefaultCategory) 
{ 

} 
+1

關於將默認值傳遞給默認構造函數:目的通常是通過類/庫作者內置的常量提供默認值來簡化類的使用。因此,尋求使用默認值的客戶端只需簡單地調用構造函數就可以不帶參數,這樣做的好處是不必提供2個參數,除非需要覆蓋默認值。 – condiosluzverde 2014-12-05 04:04:17

+0

所以在上面的「這個」部分正在調用2參數的構造函數?但它只是通過默認值?也許我一直在想這個。我的頭說如果你調用2參數的構造函數,你會得到2個參數,而不是默認值。 – ScottT 2014-12-05 04:11:22

+0

是的,這個關鍵字引用當前類,所以'this(arg1,arg2)'調用構造函數,傳遞默認值。它基本上與用戶調用傳遞默認信息的2參數構造函數相同,只是用戶不需要如果他們需要默認信息 – Shadow 2014-12-05 04:14:49

2

這是你如何能做到這...

public class Instrument 
{ 
    public string Name; 
    public string Category; 

    public Instrument() 
     : this("DefaultName", "DefaultCategory") 
    { 

    } 

    public Instrument(string name, string category) 
    { 
     this.Name = name; 
     this.Category = category; 
    } 
} 

我們答案問題爲什麼這甚至是必要的。 ...

這是爲了確保如果您遇到代碼中的實例化對象 - 無論它如何實例化(使用構造函數) - 它將始終具有有效值的屬性名稱 & 類別

基本上,它可能會使您的業務對象無bug。任何使用您的業務對象的人都會在其屬性中使用有效值 - 默認值或使用第二個構造函數傳入。