程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則14:使用構造函數鏈(1)

Effective C#原則14:使用構造函數鏈(1)

編輯:關於C語言

寫構造函數是一個反復的工作。很多開發人員都是先寫一個構造函數,然後 復制粘貼到其它的構造函數裡,以此來滿足類的一些重載接口。希望你不是這樣 做的,如果是的,就此停止吧。有經驗的C++程序可能會用一個輔助的私有方法 ,把常用的算法放在裡面來構造對象。也請停止吧。當你發現多重構造函數包含 相同的邏輯時,取而代之的是把這些邏輯放在一個常用的構造函數裡。你可以得 避免代碼的重復的好處,並且構造函數初始化比對象的其它代碼執行起來更高效 。C#編譯器把構造函數的初始化識別為特殊的語法,並且移除預置方法中重復的 變量和重復的基類構造函數。結果就是這樣的,你的對象最終執行最少的代碼來 合理的初始化對象。你同樣可以寫最少的代碼來把負責委托給一個常用的構造函 數。構造函數的預置方法充許一個構造函數調用另一個構造函數。這是一個簡單 的例子:

public class MyClass
{
 // collection of data
 private ArrayList _coll;
 // Name of the instance:
 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++是很好 的解決這個問題的(譯注:C++可以讓參數有默認的值,從而有效的減少函數的重 載)。你必須重寫每一個特殊的構造函數。對於這樣的構造函數,就意味著大量 的代碼重復工作。可以使用構造函數鏈來取代常規的方法。下面就是一些常規的 低效率的構造函數邏輯:

public class MyClass
{
  // collection of data
 private ArrayList _coll;
 // Name of the instance:
 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;
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved