熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 09:41:15  來源: .NET編程 
    在寫程序的時候往往會出現為一個類型提供不同場景的構造函數可能大多構造函數比較相似而C#中又不允許缺省參數因此構造函數的編寫無疑是一個重復工作但是使用Copy和Paste來完成構造函數的編寫有時候很難達到統一尤其是當成員發生變化的時候因此比較常見的替換方法就是為構造函數提供一個統一的成員函數來完成初始化工作
  
    例如
  
  public class MyClass
  {
   private int _Age;
   private string _Name;
  
   public MyClass( string Name)
   {
    InitMember( Name );
   }
   public MyClass( string Name int Age )
   {
    InitMember( Name Age );
   }
  
   /// <summary>
   /// Init class members
   /// </summary>
   /// <param name=Name></param>
   /// <param name=Age></param>
  
   private void InitMember( string Name int Age )
   {
    _Age = Age;
    _Name = Name;
   }
  }
  
    不過在C#中提供了更為簡明的方法就是在構造函數初始化語句中調用另一構造函數那麼上面的形式可以改寫為如下這樣
  
  public class MyClass
  {
   private int _Age;
   private string _Name;
  
   public MyClass( string Name):this( Name )
   {}
  
   public MyClass( string Name int Age )
   {
    _Age = Age;
    _Name = Name;
   }
  }
  
    對於這兩者來說執行效率沒有太大差別但從代碼質量而言後者要好很多而且會使代碼看起來更清晰
  
    其次對於基類的調用由於成員函數不能調用基類的構造函數所以對於第一種編寫就比較困難後者就簡單多了
  
    例如
  
  public class MyClass:BaseClass
  {
   private int _Age;
   private string _Name;
  
   public MyClass( string Name):this( Name )
   {}
  
   public MyClass( string Name int Age ):base( Name Age )
   {
    _Age = Age;
    _Name = Name;
   }
  }
  
    這裡要提的一點就是構造函數初始化語句對於this或者base之類的調用只能有一個不能並存
  
    最後就是對於readonly常量的初始化由於readonly常量只能通過成員初始化語句或者在構造函數中被修改因此在成員函數中無法修改readonly常量這也是構造函數初始化語句要比成員函數好的重要一個因素
  
    有了上面的說明對於兩者的對比可以形成如下這個簡單的對比表
  
   效率 代碼結構 基類調用 靜態成員初始化
  構造函數初始化語句 一樣 簡明清晰 容易 可以
  成員函數 比較清晰 比較麻煩 不能
      (注這裡不提倡Copy/Paste方法來重復編寫構造函數)

From:http://tw.wingwit.com/Article/program/net/201311/11333.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.