Freigeben über


CA2207: Statische Felder für Werttyp inline initialisieren

TypeName

InitializeValueTypeStaticFieldsInline

CheckId

CA2207

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein Werttyp deklariert einen expliziten statischen Konstruktor.

Regelbeschreibung

Ein Werttyp wird bei der Deklaration standardmäßig initialisiert. Dabei werden alle Werttypfelder auf 0 (null) festgelegt und alle Verweistypfelder auf null (Nothing in Visual Basic). Ein expliziter statischer Konstruktor wird nur vor dem Aufruf von Instanzenkonstruktoren oder statischen Membern des Typs garantiert ausgeführt. Wenn Sie also einen Typ ohne Aufruf eines Instanzenkonstruktors erstellen, ist nicht garantiert, dass der statische Konstruktor ausgeführt wird.

Wenn alle statischen Daten inline initialisiert werden und kein expliziter statischer Konstruktor deklariert wird, fügen der Compiler von C# und der Compiler von Visual Basic der MSIL-Klassendefinition die beforefieldinit-Flag hinzu. Die Compiler fügen auch einen privaten statischen Konstruktor hinzu, der den statischen Initialisierungscode enthält. Dieser private statische Konstruktor wird garantiert vor dem Zugriff auf statische Felder des Typs ausgeführt.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, initialisieren Sie alle statischen Daten nach deren Deklaration und entfernen den statischen Konstruktor.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Verwandte Regeln

CA1810: Statische Felder von Verweistypen inline initialisieren