c 類的初始化順序

2022-01-12 08:01:18 字數 1981 閱讀 5155

本文**:

c#類的初始化順序

類在初始化時的執行順序,依次如下:

1: 子類靜態變數

2: 子類靜態建構函式

3: 子類非靜態變數

4: 父類靜態變數

5: 父類靜態建構函式

6: 父類非靜態變數

7: 父類建構函式

8: 子類建構函式

對於靜態變數與靜態建構函式而言, 無論對乙個類建立多少個例項,它的靜態成員都只有乙個副本。 也就是說,靜態變數與靜態建構函式只初始化一次(在類第一次例項化時)

以下**: 

1  class class1

2     

8         public class1()

9         

12     }

例項化**:

1 class1 c = new class1();

2 class1 cc = new class1();

3 console.writeline(class1.count.tostring());

4 console.read();

當弟一次例項化時, count值變成2,  當第二次例項化時, 則不會執行靜態建構函式與靜態變數.  此時count的值變成3.   所以,最後結果count值為3

public

partial

class

form1 : form

private

void form1_load(object

sender, eventargs e)

}public

class

testclass : testbase

public testclass()//

8: 子類建構函式

}public

class

testbase

public testbase()//

7: 父類建構函式

}

view code

類在初始化時的執行順序,依次如下:

1: 子類靜態變數

2: 子類靜態建構函式

3: 子類非靜態變數

4: 父類靜態變數

5: 父類靜態建構函式

6: 父類非靜態變數

7: 父類建構函式

8: 子類建構函式

對於靜態變數與靜態建構函式而言, 無論對乙個類建立多少個例項,它的靜態成員都只有乙個副本。 也就是說,靜態變數與靜態建構函式只初始化一次(在類第一次例項化時)

以下**: 

1  class class1

2     

8         public class1()

9         

12     }

例項化**:

1 class1 c = new class1();

2 class1 cc = new class1();

3 console.writeline(class1.count.tostring());

4 console.read();

當弟一次例項化時, count值變成2,  當第二次例項化時, 則不會執行靜態建構函式與靜態變數.  此時count的值變成3.   所以,最後結果count值為3

public

partial

class

form1 : form

private

void form1_load(object

sender, eventargs e)

}public

class

testclass : testbase

public testclass()//

8: 子類建構函式

}public

class

testbase

public testbase()//

7: 父類建構函式

}

view code

類初始化順序

類初始化時,jvm會先初始化所有 1,靜態屬性,靜態例項,靜態塊。2.新建例項 靜態或非靜態 時會先執行所有非靜態屬性和構造塊 非靜態屬性和構造塊執行級別相同,誰前誰先 然後構造方法。注意 1 靜態 塊不能存在於任何方法體內。2 靜態 塊不能直接訪問靜態例項變數和例項方法,需要通過類的例項物件來訪問...

類初始化順序

類初始化順序 1.靜態構造塊最先執行,並只執行一次 2.成員變數執行,但靜態成員變數早於靜態塊執行 3.構造塊從上至下依次執行 4.構造方法執行 父類早於子類 父類靜態構造塊 子類靜態構造塊 父類成員變數 父類構造塊 父類構造方法 子類成員變數 子類構造塊 子類構造方法 靜態成員變數先於靜態塊執行 ...

類的初始化順序

寫了這麼多類 還沒仔細考慮過初始化順序 今天特意看了點這方面的知識 照著寫了個例子 初始化順序是 靜態變數 靜態初始化快 變數 初始化塊 建構函式 例子如下 public class classinitorder public classinitorder public static void ma...