首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 建構函式與解構函式用法 (2):靜態建構函式與繼承體系初始化順序

     編輯:關於C語言

3) 靜態建構函式

靜態建構函式實現類別初始化,用於靜態資料初始化。無參數、無修飾詞、不可呼叫。類別載入時自動呼叫:

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

靜態建構函式只能初始化靜態資料成員,不能初始化非靜態成員。但非靜態建構函式可同時對靜態與非靜態成員賦值/初始化。

若類別僅含靜態成員,可建立 private 建構函式防止實例化:private TestClass() { }。

繼承體系中基底與衍生類別建構函式執行順序

衍生類別物件初始化由基底與衍生類別共同完成:基底成員由基底建構函式初始化,衍生成員由衍生建構函式初始化。

執行順序規則

  1. 建立衍生類別物件時,系統呼叫基底建構函式與衍生建構函式。
  2. 順序:先執行基底建構函式,再執行衍生建構函式。
  3. 若衍生類別有成員物件:先基底建構函式 → 成員物件類別建構函式 → 衍生建構函式。

指定基底建構函式

預設呼叫基底無參建構函式。需呼叫基底有參建構函式,必須在衍生建構函式成員初始化清單指定:

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; }
}

建構函式執行順序務必分析清楚。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved