Udostępnij za pośrednictwem


CA2207: Inicjowanie pól statycznych typu wartościowego

Właściwości Wartość
Identyfikator reguły CA2207
Tytuł Pola statyczne typu wartości inicjuj bezpośrednio
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Typ wartości deklaruje jawny konstruktor statyczny.

Opis reguły

Po zadeklarowaniu typu wartości następuje domyślna inicjalizacja, w której wszystkie pola typu wartości są ustawione na zero, a wszystkie pola typu odwołania są ustawione na null (Nothing w Visual Basic). Jawny konstruktor statyczny ma gwarancję uruchomienia tylko przed wywołaniem konstruktora wystąpienia lub statycznego elementu członkowskiego typu. W związku z tym, jeśli typ jest tworzony bez wywoływania konstruktora wystąpienia, konstruktor statyczny nie ma gwarancji uruchomienia.

Jeśli wszystkie dane statyczne są inicjowane w tekście i nie zadeklarowany jest jawny konstruktor statyczny, kompilatory języka C# i Visual Basic dodają flagę beforefieldinit do definicji klasy CIL. Kompilatory dodają również prywatny konstruktor statyczny zawierający statyczny kod inicjowania. Ten prywatny konstruktor statyczny ma gwarancję uruchomienia przed uzyskaniem dostępu do wszystkich pól statycznych typu.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zainicjuj wszystkie dane statyczne po zadeklarowaniu i usunięciu konstruktora statycznego.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

CA1810: Inicjuj pola statyczne typu referencyjnego śródwierszowo