C#箴言:使用構造函數(shù)初始化語句

字號:

在寫程序的時候,往往會出現(xiàn)為一個類型提供不同場景的構造函數(shù),可能大多構造函數(shù)比較相似,而C#中又不允許缺省參數(shù),因此構造函數(shù)的編寫無疑是一個重復工作。但是使用Copy和Paste來完成構造函數(shù)的編寫,有時候很難達到統(tǒng)一,尤其是當成員發(fā)生變化的時候。因此比較常見的替換方法就是為構造函數(shù)提供一個統(tǒng)一的成員函數(shù)來完成初始化工作。
    例如:
    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 );
    }
    ///
    /// Init class members
    ///

    ///
    ///
    private void InitMember( string Name, int Age )
    {
    _Age = Age;
    _Name = Name;
    }
    }
    不過,在C#中提供了更為簡明的方法,就是在構造函數(shù)初始化語句中調用另一構造函數(shù),那么上面的形式可以改寫為如下這樣。
    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;
    }
    }
    對于這兩者來說,執(zhí)行效率沒有太大差別,但從代碼質量而言,后者要好很多,而且會使代碼看起來更清晰。