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.
Powiązane reguły
CA1810: Inicjuj pola statyczne typu referencyjnego śródwierszowo