傳統做法抽取共用初始化方法:
public class MyClass {
private int _age; private string _name;
public MyClass(string name) { InitMember(name, 20); }
public MyClass(string name, int age) { InitMember(name, age); }
private void InitMember(string name, int age) { _age = age; _name = name; }
}
this(...) 鏈式呼叫public class MyClass {
private int _age; private string _name;
public MyClass(string name) : this(name, 20) { }
public MyClass(string name, int age) {
_age = age; _name = name;
}
}
base(...)public class MyClass : BaseClass {
private int _age; private string _name;
public MyClass(string name) : this(name, 20) { }
public MyClass(string name, int age) : base(name, age) {
_age = age; _name = name;
}
}
限制:this 與 base 不能同時出現在同一個初始化語句中。
readonly 欄位僅能在宣告時或建構函數中賦值,無法在一般方法中修改。建構函數初始化語句天然支援此需求。
| 面向 | 建構函數初始化語句 | 私有初始化方法 |
|---|---|---|
| 效能 | 相同 | 相同 |
| 程式碼結構 | 清晰、無重複 | 較清晰但有重複呼叫 |
| 基類呼叫 | 直接支援 | 無法直接呼叫 |
| readonly 支援 | 支援 | 不支援 |