Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2207 |
| Název | Inicializujte statická pole s typem hodnoty vloženě |
| Kategorie | Využití |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Typ hodnoty deklaruje explicitní statický konstruktor.
Popis pravidla
Když je deklarován typ hodnoty, projde výchozí inicializací, kde jsou všechna pole typu hodnota nastavena na nulu a všechna pole typu odkazu jsou nastavena na null (Nothing v jazyce Visual Basic). U explicitního statického konstruktoru je zaručeno, že se spustí pouze před konstruktorem instance nebo statickým členem typu. Proto, pokud je typ vytvořen bez volání konstruktoru instance, není zaručeno, že bude statický konstruktor spuštěn.
Pokud jsou všechna statická data inicializována inline a není deklarován žádný explicitní statický konstruktor, kompilátory jazyka C# a Visual Basic přidávají příznak beforefieldinit do definice třídy CIL. Kompilátory také přidávají privátní statický konstruktor, který obsahuje kód statické inicializace. Privátní statický konstruktor se zaručeně spustí před jakýmkoliv přístupem ke statickým polím tohoto typu.
Jak opravit porušení
Chcete-li vyřešit porušení tohoto pravidla, inicializujte všechna statická data při jejich deklaraci a odstraňte statický konstruktor.
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;
// ...
}
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.