建構函式的執行順序

2022-01-29 07:43:46 字數 1833 閱讀 8283

1:  

using system;

2:  

using system.collections.generic;

3:  

using system.linq;

4:  

using system.text;

5:
6:  

namespace 例項構造器

13:  

14:  

public string b = "bjq";

15:  

16:  

public a()

19:  

20:  

static void main(string args)

24:  

*/

25:
26:  

class program

35:  

static program()

40:      }
41:
42:  

class a

48:      }
49:
50:  

class b //注意這裡改為了靜態的建構函式

53:      }
54:  }

還有一段**,也是說明這個使用的:

關鍵是靜態字段以及改變順序的this和base,注意有引數和沒有引數時候的構造函式呼叫,基本沒有問題啦

using system;
class base
private

static component basestaticfield = new component("基類靜態欄位被例項化。");

private component baseinstancefield = new component("基類例項成員欄位被例項化。");
public base()
}
//此型別用作派生類,同基類一樣,它也包含靜態建構函式,以及靜態字段、例項成員欄位各乙個。
class derived : base
private

static component derivedstaticfield = new component("派生類靜態欄位被例項化。");

private component derivedinstancefield = new component("派生類例項成員欄位被例項化。");
public derived()
}
//此型別用於作為base類和derived類的成員
//此型別在例項化的時候可以在控制台輸出自定義資訊,以給出相關提示
class component
}
//在主程式裡例項化了乙個子類物件
class program
}

總的原則,也就是根據記憶體的布局,clr載入方法的過程確定的,基本知道物件的建立過程就是沒有問題了~

大體的順序:

靜態字段

靜態建構函式(值型別不一定執行~)

例項字段

例項建構函式(遞迴到system.object逐個基類執行)使用base和this可以改變類內預設的呼叫順序

建構函式的執行順序

任何建構函式都可以進行配置,以便在執行自己的 前呼叫其它建構函式。我們首先看看在建立類的例項時會發生什麼情況。為了例項化派生的類,必須例項化它的基類。而要例項化這個基類,又必須例項化這個基類的基類,這樣一直例項化到system.object為止。結果是無論使用什麼建構函式例項化乙個類,總是要先呼叫s...

PHP建構函式的執行順序

php建構函式的執行順序 測試 如下 class grandfather class father extends grandfather class son extends father test new son 結果是 son class grandfather class father ext...

C 建構函式的執行順序

類的大小 1 一般情況下,類的大小是類裡資料成員大小之和,普通函式不佔空間 2 static不佔空間大小 3 virtual虛函式,如果有虛函式,則多乙個vptr 虛指標 不管有多少虛函式,都只有乙個虛指標,指標佔4個位元組大小。4 空類佔乙個位元組大小。建構函式的執行順序 class test t...