2009-09-22 41 views
8

考慮下面的類:在C#中,構造函數鏈接的最佳/可接受的方式是什麼?

public class MyClass 
{ 
    private string _param; 

    public MyClass() 
    { 
     _param = string.Empty; 
    } 

    public MyClass (string param) 
    { 
     _param = param; 
    } 
} 

我兩種方法鏈的構造函數之間四分五裂:

第一個

public MyClass() : this (string.Empty) 
{ 
} 

public MyClass (string param) 
{ 
    _param = param; 
} 

第二個:

public MyClass() 
{ 
    _param = string.Empty; 
} 

public MyClass (string param) : this() 
{ 
    _param = param; 
} 

那麼,從無參數構造函數或其他方式鏈接更好?

回答

13

用你的例子,我會走第一條路。第二個實際上並沒有消除任何你想要避免的代碼重複,因爲你仍然必須明確地設置_param。第二種方法中的空的this()呼叫是完全無償的。

+0

事實上,這似乎是這裏的共識。 – 2009-09-22 18:23:11

4

我更喜歡第一個。構造函數的行爲將始終如此一致且可預測,並且減少代碼重複。從pramater少

3

鏈pramater,

所以從默認瓦爾斯出租人PARAM構造函數調用到多個參數

public MyClass() 
{ 
    MyClass(default value here); 
} 

public Myclass(value) 
{ 
    _value = value; 
} 
1

我會想象,它總是從較小的更大,即鏈更好爲什麼要在構造函數中分配一個空字符串然後給定的字符串,當將默認(string.Empty)傳遞給參數化的構造函數更有意義時。

0

如果你在這裏陳述你的目標是「當沒有指定值時提供默認值」,那麼你應該清楚地使用第一種方法。

一般的規則是:從最不具體的構造函數鏈到最具體的。

1

我更喜歡第一個。就像在一個從簡單基類繼承的複雜派生類中一樣,您希望「複雜」構造函數構建「基本」函數的功能。

1

由於您重複了類成員的分配(如果使用MyClass (string param)構造函數),所以在您的案例中的第二個示例確實沒有意義。

如果鏈式構造函數是「添加功能」,則第二種方法更有用。

例子:

public MyClass() 
{ 
    _param0 = string.Empty; 
} 

public MyClass (string param1) : this() 
{ 
    _param1 = param1; 
} 

public MyClass (string param1, string param2) : this (param1) 
{ 
    _param2 = param2; 
} 

你的具體情況,第一個例子顯然是更合適的,因爲你只有一次分配到相同的成員。

相關問題