Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA2207 |
| Tytuł | Inicjuj pola statyczne typu wartości w miejscu |
| Kategoria | Użycie |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
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). Jawnie zdefiniowany konstruktor statyczny ma gwarancję uruchomienia tylko przed wywołaniem konstruktora instancji lub statycznego członka typu. W związku z tym, jeśli typ jest tworzony bez wywołania konstruktora instancji, nie ma gwarancji uruchomienia konstruktora statycznego.
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.
Example
// This struct violates the rule.
struct BadStruct
{
private static readonly int s_first;
private static readonly int s_second;
static BadStruct()
{
s_first = 1;
s_second = 2;
}
// ...
}
// This struct satisfies the rule.
struct GoodStruct
{
private static readonly int s_first = 1;
private static readonly int s_second = 2;
// ...
}
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.
Powiązane reguły
CA1810: Inicjalizuj pola statyczne typu referencyjnego w linii