C 類本身的初始化和靜態欄位的初始化到底發生在什麼時候?

時間 2021-05-31 10:29:13

1樓:餘葉

其實就兩個構造器。乙個是靜態的,乙個是普通的。

靜態構造器得需要你第一次訪問到該類的時候會被觸發。建立的時候,包括 static 成員變數的初始化和static構造器,其實 static 成員變數會整合進static構造器裡面的。

而普通成員變數也會整合進普通構造器裡面的。

2樓:天煞

如@Sai說的,類元資料會被在assembly load的時候被載入

如MSDN說的,類只有元資料會在load的時候載入,其他的載入都會發生在第一次引用上

靜態構造器是無法判斷載入時間的,但根據MSDN說的,他會發生在第一次訪問類引用或者內部的靜態變數之前被Invoke,所以靜態變數初始化和類構造器應該是先後發生的,就像例項變數初始化和例項變數構造器一樣。

看起來是不可以語義上提前建立的,但如果你想提前建立,就提前訪問一下這個類就可以了。

Static Constructors - C# Programming Guide | Microsoft Docs

3樓:

可以認為type是面向開發者的乙個元資料獲取機制。

2. 稍微有些沒看懂如果發生了類的載入就會發生靜態變數的初始化,在clr內部變數的初始化是翻譯到建構函式裡的, 打個比方有這樣的乙個類,

翻譯出來其實是這個樣子

建構函式裡會先做初始化再做建構函式裡的邏輯

關於如果靜態變數instance的初始化,寫在靜態構造器中,那麼該instance還會在首次訪問該類的時候才建立嗎?能否提前建立?

不好意思我可能沒太讀明白這個意思。

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...

為什麼mxnet的卷積層初始化需要weight和bias,但kera的卷積層不需要?

Wison keras.layers.convolutional.pyclass Conv2D Conv def init self filters kernel size strides 1,1 padding valid data format None dilation rate 1,1 ac...

C 函式返回常引用給常引用初始化的問題,大家可不可以幫幫我?

黃亮anthony std string get std string t return t 就能滿足這裡的要求。謹慎所有返回引用函式 記憶體塊生命週期 不說人話 字串字面值隱式構造了string物件,get的引數引用了該string物件。但是該物件產生於get函式執行週期內,且由該週期內的棧持有,...