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

C#中構造函數和析構函數的用法(2)

編輯:關於C語言

3) 靜態構造函數

靜態構造函數是實現對一個類進行初始化的方法成員。它一般用於對靜態數據的初始化。靜態構造函數不能有參數,不能有修飾符而且不能被調用,當類被加載時,類的靜態構造函數自動被調用。如:

using System.Data;
class Employee
{
  private static DataSet ds;
  static Employee()
  {
   ds = new DataSet(...);
  }
  ...
}

聲明了一個有靜態構造函數的類Employee。注意靜態構造函數只能對靜態數據成員進行初始化,而不能對非靜態數據成員進行初始化。但是,非靜態構造函數既可以對靜態數據成員賦值,也可以對非靜態數據成員進行初始化。

如果類僅包含靜態成員,你可以創建一個private的構造函數:private TestClass() {…},但是private意味著從類的外面不可能訪問該構造函數。所以,它不能被調用,且沒有對象可以被該類定義實例化。

以上是幾種類型構造函數的簡單運用,下面將重點介紹一下在類的層次結構中(即繼承結構中)基類和派生類的構造函數的使用方式。派生類對象的初始化由基類和派生類共同完成:基類的成員由基類的構造函數初始化,派生類的成員由派生類的構造函數初始化。

當創建派生類的對象時,系統將會調用基類的構造函數和派生類的構造函數,構 造函數的執行次序是:先執行基類的構造函數,再執行派生類的構造函數。如果派生類又有對象成員,則,先執行基類的構造函數,再執行成員對象類的構造函數,最後執行派生類的構造函數。

至於執行基類的什麼構造函數,缺省情況下是執行基類的無參構造函數,如果要執行基類的有參構造函數,則必須在派生類構造函數的成員初始化表中指出。如:

class A
{ private int x;
  public A( ) { x = 0; }
  public A( int i ) { x = i; }
};
class B : A
{ private int y;
  public B( ) { y = 0; }
  public B( int i ) { y = i; }
  public B( int i, int j ):A(i) { y = j; }
};

B b1 = new B(); //執行基類A的構造函數A(),再執行派生類的構造函數B()

B b2 = new B(1); //執行基類A的構造函數A(),再執行派生類的構造函數B(int)

B b3 = new B(0,1); //執行執行基類A的構造函數A(int) ,再執行派生類的

構造函數B(int,int)

在這裡構造函數的執行次序是一定要分析清楚的。另外,如果基類A中沒有提供無參構造函數public A( ) { x = 0; },則在派生類的所有構造函數成員初始化表中必須指出基類A的有參構造函數A(i),如下所示:

class A
{ private int x;
  public A( int i ) { x = i; }
};
class B : A
{ private int y;
  public B():A(i) { y = 0; }
  public B(int i):A(i) { y = i; }
  public B(int i, int j):A(i) { y = j; }
};

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