CA2207: Inicjowanie pól statycznych typu wartościowego
TypeName |
InitializeValueTypeStaticFieldsInline |
CheckId |
CA2207 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Typ wartości deklaruje jawny, statyczny konstruktor.
Opis reguły
Zadeklarowany typ wartości poddawany jest domyślnemu inicjowaniu, gdzie wszystkie pola typu wartości są ustawiane na zero i wszystkie pola typu odwołania ustawiane są na null (Nothing w języku Visual Basic).Jawny konstruktor statyczny jest tylko gwarancją uruchomienia przed konstruktorem wystąpienia lub statycznego elementu członkowskiego typu, który jest wywoływany.Dlatego jeśli typ został utworzony bez wywołania konstruktora wystąpienia, uruchomienie konstruktora statycznego nie jest gwarantowane.
Jeśli wszystkie dane statyczne są zainicjowane w tekście i jawny konstruktor statyczny nie jest zadeklarowany, kompilatory C# i Visual Basic dodają flagę beforefieldinit do definicji klasy MSIL.Kompilatory dodają również prywatny statyczny konstruktor, zawierający kod inicjowania statycznego.Uruchomienie tego prywatnego konstruktora statycznego jest gwarantowane przed uzyskaniem dostępu do statycznych pól typu.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, zainicjuj wszystkie dane statyczne, gdy są deklarowane i usuń konstruktor statyczny.
Kiedy pominąć ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.
Powiązane reguły
CA1810: Zainicjuj wbudowane pola statyczne typu referencyjnego