撰寫建構函式是重複性工作。許多開發人員先寫一個建構函式,再複製貼上到其他建構函式滿足多載介面。請停止這樣做。有經驗的 C++ 程式設計師可能用私有輔助方法放置共用演算法。也請停止。當發現多個建構函式包含相同邏輯,應將邏輯放入一個共用建構函式。可避免程式碼重複,且建構函式初始化比其他程式碼執行更有效率。C# 編譯器識別建構函式初始化為特殊語法,移除預置方法中重複變數與基類建構函式呼叫。結果:物件以最少程式碼合理初始化。你也能寫最少程式碼將責任委派給共用建構函式。
public class MyClass
{
private ArrayList _coll;
private string _name;
public MyClass() : this(0, "") { }
public MyClass(int initialCount) : this(initialCount, "") { }
public MyClass(int initialCount, string name)
{
_coll = (initialCount > 0) ? new ArrayList(initialCount) : new ArrayList();
_name = name;
}
}
C++ 以預設參數值妥善解決此問題(減少函式多載)。C# 必須重寫每個特定建構函式,意味著大量重複工作。使用建構函式鏈結取代常規方法。以下為常規低效率建構函式邏輯:
public class MyClass
{
private ArrayList _coll;
private string _name;
public MyClass() { commonConstructor(0, ""); }
public MyClass(int initialCount) { commonConstructor(initialCount, ""); }
public MyClass(int initialCount, string Name) { commonConstructor(initialCount, Name); }
private void commonConstructor(int count, string name)
{
_coll = (count > 0) ? new ArrayList(count) : new ArrayList();
_name = name;
}
}