Share via


CA2207:必須將實值類型的靜態欄位內嵌初始化

屬性
規則識別碼 CA2207
職稱 必須將實值類型的靜態欄位內嵌初始化
類別 使用方式
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 No

原因

實值型別會宣告明確的靜態建構函式。

檔案描述

宣告實值類型時,它會進行預設初始化,其中所有實值類型欄位都設定為零,而且所有參考類型字段都會設定為 nullNothing 在 Visual Basic 中)。 只有在呼叫型別的實例建構函式或靜態成員之前,才保證會執行明確的靜態建構函式。 因此,如果在未呼叫實例建構函式的情況下建立類型,則不保證會執行靜態建構函式。

如果所有靜態數據都是內嵌初始化,而且不會宣告任何明確的靜態建構函式,C# 和 Visual Basic 編譯程式會將旗標新增 beforefieldinit 至 CIL 類別定義。 編譯程式也會新增包含靜態初始化程序代碼的私人靜態建構函式。 此私人靜態建構函式保證會在存取類型的任何靜態字段之前執行。

如何修正違規

若要修正此規則的違規,請在宣告並移除靜態建構函式時,初始化所有靜態數據。

隱藏警告的時機

請勿隱藏此規則的警告。

CA1810:必須將參考類型內部的靜態欄位初始化