c 靜態建構函式 與 建構函式 你是否還記得?

2021-09-08 05:09:44 字數 2268 閱讀 7278

建構函式這個概念,在我們剛開始學習程式語言的時候,就被老師一遍一遍的教著。親,現在你還記得靜態建構函式的適用場景嗎?如果沒有,那麼我們一起來複習一下吧。

靜態建構函式是在建構函式方法前面新增了static關鍵字之後形成的,並且沒有修飾符(public,private),沒有引數。

靜態建構函式有哪些特點呢:

靜態建構函式沒有修飾符修飾(public,private),因為靜態建構函式不是我們程式設計師呼叫的,是由.net 框架在合適的時機呼叫的。

靜態建構函式沒有引數,因為框架不可能知道我們需要在函式中新增什麼引數,所以規定不能使用引數。

靜態建構函式前面必須是static 關鍵字。如果不加這個關鍵字,那就是普通的建構函式了。

靜態建構函式中不能例項化例項變數。(變數可以分為類級別和例項級別的變數,其中類級別的有static關鍵字修飾)。

靜態函式的呼叫時機,是在類被例項化或者靜態成員被呼叫的時候進行呼叫,並且是由.net框架來呼叫靜態建構函式來初始化靜態成員變數。

乙個類中只能有乙個靜態建構函式。

無引數的靜態建構函式和無引數的建構函式是可以並存的。因為他們乙個屬於類級別,乙個屬於例項級別,並不衝突。

靜態建構函式只會被執行一次。並且是在特點5中的呼叫時機中進行呼叫。

就像如果沒有在類中寫建構函式,那麼框架會為我們生成乙個建構函式,那麼如果我們在類中定義了靜態變數,但是又沒有定義靜態建構函式,那麼框架也會幫助我們來生成乙個靜態建構函式來讓框架自身來呼叫。

上面幾個特點都是理論性的,我們來做乙個找錯題,幫助我們一起來學習靜態建構函式。

1     public class c

2

8 public static c(string mm)

9

12 static c()

13

16 public c()

17

20 public c(string mm)

21

24 }

vs編譯提示的錯誤資訊:

現在我們來做乙個有意思的事情,驗證靜態建構函式的呼叫時機:

1  class program

2

10 }

11 public class a

12

19 public a()

20

23 }

24 public class b:a

25

30 public b()

31

34 }

輸出結果均為:aaa

我們來分析一下出現這個情況的原因所在,當顯示a.strtext的時候,因為strtext是靜態變數,所以框架會呼叫a的靜態建構函式,此時strtext的值為aaa.正確

當顯示b.strtext的時候,因為b繼承自a,所以會首先呼叫a的靜態建構函式,但是因為靜態建構函式只會呼叫一次,所以不會呼叫a的靜態建構函式,但是又因為strtext屬於類a,而不是b,所以b得靜態建構函式不會執行,故輸出的均為aaa。

但是如果我們把輸出更改一下,輸出結果就大不一樣了。

1     class program

2

13 }

14 public class a

15

22 public a()

23

26 }

27 public class b:a

28

33 public b()

34

37 }

請注意我在開始部分對類進行了例項化,那麼此時的輸出結果就是均為bbb。

為什麼會有這樣的情況出現呢,其實還是要從靜態建構函式的呼叫時機入手。

首先我們例項化了b,此時會呼叫b的靜態建構函式,但是因為strtext是a的靜態變數,所以首先會先呼叫a的靜態建構函式將strtext賦值為aaa,此時又會呼叫b的靜態建構函式將strtext賦值為bbb,所以此時strtext的值應該為bbb,所以輸出均為bbb。

我又回來了,回到了技術最前線,

c 靜態建構函式 與 建構函式 你是否還記得?

建構函式這個概念,在我們剛開始學習程式語言的時候,就被老師一遍一遍的教著。親,現在你還記得靜態建構函式的適用場景嗎?如果沒有,那麼我們一起來複習一下吧。靜態建構函式是在建構函式方法前面新增了static關鍵字之後形成的,並且沒有修飾符 public,private 沒有引數。靜態建構函式有哪些特點呢...

C 靜態建構函式

c 靜態建構函式 靜態建構函式是 c 的乙個新特性,在程式設計過程中用處並不廣,它的主要目的是用於初始化一些靜態的變數。因為這個建構函式是屬於類的,而不屬於任何乙個例項,所以這個建構函式只會被執行一次,而且是在建立此類的第乙個例項或引用任何靜態成員之前,由 net 自動呼叫。在程式中我們可以這樣寫 ...

c 靜態建構函式

c 靜態建構函式,又稱類建構函式。它是屬於類的,不屬於任何乙個類的例項。它具有以下特點 1 以static定義的,無訪問修飾符,無返回型別,無引數的建構函式,如 code class test 2 不能通過 顯式的呼叫靜態建構函式 3 靜態建構函式在類的靜態成員第一次訪問或第乙個類例項建立之前由系統...