靜態建構函式實現類別初始化,用於靜態資料初始化。無參數、無修飾詞、不可呼叫。類別載入時自動呼叫:
using System.Data;
class Employee
{
private static DataSet ds;
static Employee() { ds = new DataSet(...); }
}
靜態建構函式只能初始化靜態資料成員,不能初始化非靜態成員。但非靜態建構函式可同時對靜態與非靜態成員賦值/初始化。
若類別僅含靜態成員,可建立 private 建構函式防止實例化:private TestClass() { }。
衍生類別物件初始化由基底與衍生類別共同完成:基底成員由基底建構函式初始化,衍生成員由衍生建構函式初始化。
預設呼叫基底無參建構函式。需呼叫基底有參建構函式,必須在衍生建構函式成員初始化清單指定:
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() → B()
B b2 = new B(1); // A() → B(int)
B b3 = new B(0, 1); // A(int) → B(int, int)
衍生類別所有建構函式成員初始化清單必須指定基底有參建構函式:
class A { private int x; public A(int i) { x = i; } }
class B : A
{
private int y;
public B() : A(0) { y = 0; } // 必須指定 A(0)
public B(int i) : A(i) { y = i; }
public B(int i, int j) : A(i) { y = j; }
}
建構函式執行順序務必分析清楚。