Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA2207 |
| Titre | Initialisez les champs statiques des types de valeur directement |
| Catégorie | Utilisation |
| Le correctif a un effet disruptif ou non disruptif | Sans rupture |
| Activé par défaut dans .NET 10 | Non |
| Langues applicables | C# et Visual Basic |
Cause
Un type valeur déclare un constructeur statique explicite.
Description de la règle
Lorsqu’un type valeur est déclaré, il subit une initialisation par défaut où tous les champs de type valeur sont définis sur zéro et tous les champs de type référence sont définis sur null (Nothing en Visual Basic). Un constructeur statique explicite ne peut s’exécuter qu’avant l’appel d’un constructeur d’instance ou d’un membre statique du type. Par conséquent, si le type est créé sans appeler un constructeur d’instance, l’exécution du constructeur statique n’est pas garantie.
Si toutes les données statiques sont initialisées inline et qu’aucun constructeur statique explicite n’est déclaré, les compilateurs C# et Visual Basic ajoutent l’indicateur beforefieldinit à la définition de classe CIL. Les compilateurs ajoutent également un constructeur statique privé qui contient le code d’initialisation statique. Ce constructeur statique privé est assuré de s'exécuter avant que tout champ statique du type ne soit accédé.
Comment corriger les violations
Pour corriger une violation de cette règle, initialisez toutes les données statiques lorsqu’elles sont déclarées et supprimez le constructeur statique.
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;
// ...
}
Quand supprimer les avertissements
Ne supprimez pas un avertissement provenant de cette règle.
Règles associées
CA1810 : Initialisez les champs statiques de type référence en ligne