Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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ł | 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 10 | 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.
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: Inicjuj pola statyczne typu referencyjnego śródwierszowo