CA2207:必須將實值類型的靜態欄位內嵌初始化
屬性 | 值 |
---|---|
規則識別碼 | CA2207 |
職稱 | 必須將實值類型的靜態欄位內嵌初始化 |
類別 | 使用方式 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 8 中啟用 | No |
原因
實值型別會宣告明確的靜態建構函式。
檔案描述
宣告實值類型時,它會進行預設初始化,其中所有實值類型欄位都設定為零,而且所有參考類型字段都會設定為 null
(Nothing
在 Visual Basic 中)。 只有在呼叫型別的實例建構函式或靜態成員之前,才保證會執行明確的靜態建構函式。 因此,如果在未呼叫實例建構函式的情況下建立類型,則不保證會執行靜態建構函式。
如果所有靜態數據都是內嵌初始化,而且不會宣告任何明確的靜態建構函式,C# 和 Visual Basic 編譯程式會將旗標新增 beforefieldinit
至 CIL 類別定義。 編譯程式也會新增包含靜態初始化程序代碼的私人靜態建構函式。 此私人靜態建構函式保證會在存取類型的任何靜態字段之前執行。
如何修正違規
若要修正此規則的違規,請在宣告並移除靜態建構函式時,初始化所有靜態數據。
隱藏警告的時機
請勿隱藏此規則的警告。