CA2207 : Initialisez les champs static des types valeur en ligneCA2207: Initialize value type static fields inline

TypeNameTypeName InitializeValueTypeStaticFieldsInlineInitializeValueTypeStaticFieldsInline
CheckIdCheckId CA2207CA2207
CategoryCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Un type valeur déclare un constructeur statique explicite.A value-type declares an explicit static constructor.

Description de la règleRule description

Lorsqu’un type valeur est déclaré, il subit une initialisation par défaut où tous les champs de type de valeur sont définies à zéro et tous les champs de type référence sont définies null (Nothing en Visual Basic).When a value-type is declared, it undergoes a default initialization where all value-type fields are set to zero and all reference-type fields are set to null (Nothing in Visual Basic). Un constructeur statique explicite est garanti uniquement à exécuter avant le constructeur d’instance ou un membre statique du type est appelé.An explicit static constructor is only guaranteed to run before an instance constructor or static member of the type is called. Par conséquent, si le type est créé sans appeler un constructeur d’instance, le constructeur statique n’est pas garanti pour exécuter.Therefore, if the type is created without calling an instance constructor, the static constructor is not guaranteed to run.

Si toutes les données statiques sont initialisées inline et aucun constructeur statique explicite n’est déclaré, les compilateurs c# et Visual Basic ajoutent le beforefieldinit indicateur pour la définition de classe MSIL.If all static data is initialized inline and no explicit static constructor is declared, the C# and Visual Basic compilers add the beforefieldinit flag to the MSIL class definition. Les compilateurs ajoutent également un constructeur statique privé qui contient le code d’initialisation statique.The compilers also add a private static constructor that contains the static initialization code. Ce constructeur statique privé est garanti à exécuter avant que tous les champs statiques du type sont accessibles.This private static constructor is guaranteed to run before any static fields of the type are accessed.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle initialiser toutes les données statiques lorsqu’il est déclaré et supprimez le constructeur statique.To fix a violation of this rule initialize all static data when it is declared and remove the static constructor.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

CA1810 : Initialisez les champs statiques de type référence en ligneCA1810: Initialize reference type static fields inline