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

構造函數和析構函數

2013-11-13 10:14:06  來源: .NET編程 

  類構造函數

  本節將討論三種類構造函數

  類構造函數的類型

  注釋

  實例

  用於創建並初始化類的實例

  私有

  在類之外不可訪問的特殊類型實例構造函數無法用私有構造函數來實例化類

  靜態

  在創建第一個實例或引用任何靜態成員之前將自動調用這種構造函數來初始化類無法直接調用這種構造函數

  備注

  () 實例構造函數

  創建新對象時將調用類構造函數例如

  Point myPoint = new Point();

  一個類可以有多個構造函數例如可以聲明一個不帶參數的構造函數(如 Point())和一個帶參數的構造函數(如 Point(int x int y))

  如果類沒有構造函數將自動生成一個默認的無參數構造函數並使用默認值初始化對象字段(例如int 將初始化為

  類構造函數可通過base關鍵字來調用基類的構造函數例如

  public Cylinder(double radius double height): base(radius height)

  {

  }

  類構造函數也可通過關鍵字 this 調用同一個類的另一個構造函數例如

  public Point(): this()

  {

  }

  在前面的示例中無參數構造函數 Point() 調用了另一個帶有兩個參數的構造函數將默認位置初始化為 ( )

  ()私有構造函數

  私有構造函數是一種特殊的實例構造函數它通常用在只包含靜態成員的類中如果類具有一個或多個私有構造函數而沒有公共構造函數則不允許其他類(除了嵌套類)創建該類的實例例如

  class NLog

  {

  // Private Constructor:

  private NLog() {}

  public static double e = ;

  }

  聲明空構造函數可阻止自動生成默認構造函數注意如果您不對構造函數使用訪問修飾符則在默認情況下它仍為私有構造函數但是通常顯式地使用 private(私有)修飾符來清楚地表明該類不能被實例化

  ()靜態構造函數

  靜態構造函數用於初始化類在創建第一個實例或引用任何靜態成員之前將自動調用靜態構造函數來初始化類

  靜態構造函數既沒有訪問修飾符也沒有參數

  在創建第一個實例或引用任何靜態成員之前(方法或字段)將自動調用靜態構造函數來初始化類

  無法直接調用靜態構造函數靜態構造函數也不能訪問非靜態成員它只被調用一次

  在程序中用戶無法控制何時執行靜態構造函數

  靜態構造函數的典型用途是當類使用日志文件時將使用這種構造函數向日志文件中寫入項

  結構構造函數

  結構構造函數類似於類構造函數只是存在以下差異

  n         結構不能包含顯式的無參數構造函數結構成員將自動初始化為它們的默認值

  n         結構不能有以下形式的初始值設定項base (argumentlist)

  結構可以聲明構造函數但它們必須帶參數聲明結構的默認(無參數)構造函數是錯誤的結構成員不能有初始值設定項總是提供默認構造函數以將結構成員初始化為它們的默認值

  對於結構不像類那樣存在繼承一個結構不能從另一個結構或類繼承結構不能有以下形式的初始值設定項base (argumentlist)

  析構函數

  析構函數用於銷毀類的實例

  備注

  不能對結構使用析構函數只能對類使用析構函數

  一個類只能有一個析構函數

  無法繼承或重載析構函數

  無法調用析構函數它們是被自動調用的

  析構函數既沒有修飾符也沒有參數例如下面是類 MyClass 的析構函數的聲明

  ~ MyClass()

  {

  // Cleanup statements

  }

  該析構函數隱式地對對象的基類調用 ObjectFinalize 方法這樣前面的析構函數代碼被隱式地轉換為

  protected override void Finalize()

  {

  try

  {

  // Cleanup statements

  }

  finally

  {

  baseFinalize();

  }

  }

  這意味著對繼承鏈中的所有實例遞歸地(從派生相近程度最大的到派生相近程度最小的)調用 Finalize 方法

  程序員無法控制何時調用析構函數因為這由垃圾回收器決定的垃圾回收器檢查是否存在應用程序不再使用的對象它認為這些對象符合銷毀條件並回收這些對象占用的內存程序退出時也會調用析構函數

  base關鍵字

  base 關鍵字用於從派生類中訪問基類的成員

  調用基類上已被其他方法重寫或隱藏的方法

  指定創建派生類實例時應調用的基類構造函數

  基類訪問只能在構造函數實例方法或實例屬性訪問器中進行

  靜態方法中使用 base 關鍵字是錯誤的

  This 關鍵字

  this 關鍵字表示類的當前實例

  靜態成員沒有 this 指針

  訪問被相同的名稱隱藏的成員

  如

  public Employee(string name string alias)

  {

  thisname = name;

  thisalias = alias;

  }

  將this作為參數傳遞到其他方法

  如

  CalcTax(this);

  聲明索引器例如

  public int this [int param]

  {

  get

  {

  return array[param];

  }

  set

  {

  array[param] = value;

  }

  }

  調用同類中其它的構造函數

  靜態方法靜態屬性訪問器引用 this 是錯誤的


From:http://tw.wingwit.com/Article/program/net/201311/12990.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.