CA2211 : Les champs non constants ne doivent pas être visibles
Propriété | Value |
---|---|
Identificateur de la règle | CA2211 |
Titre | Les champs non constants ne doivent pas être visibles |
Catégorie | Utilisation |
Le correctif est cassant ou non cassant | Rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
Un champ statique public ou protégé n’est pas constant ni en lecture seule.
Description de la règle
Les champs statiques qui ne sont ni constants ni en lecture seule ne sont pas thread-safe. L’accès à un tel champ doit être scrupuleusement contrôlé et requiert des techniques de programmation évoluées pour synchroniser l’accès à l’objet de classe. Étant donné que ces compétences sont difficiles à apprendre et à tester un tel objet pose ses propres défis, les champs statiques sont mieux utilisés pour stocker les données qui ne changent pas. Cette règle s’applique aux bibliothèques ; les applications ne doivent pas exposer de champs.
Comment corriger les violations
Pour corriger une infraction de cette règle, rendez la constante de champ statique ou en lecture seule. Si cela n’est pas possible, remaniez le type pour utiliser un autre mécanisme, tel qu’une propriété thread-safe qui gère l’accès thread-safe au champ sous-jacent. Réalisez que les problèmes tels que la contention de verrou et les blocages peuvent affecter les performances et le comportement de la bibliothèque.
Quand supprimer les avertissements
Il est sûr de supprimer un avertissement de cette règle si vous développez une application et avez donc un contrôle total sur l’accès au type qui contient le champ statique. Les concepteurs de bibliothèque ne doivent pas supprimer un avertissement de cette règle ; l’utilisation de champs statiques non constants peut rendre difficile l’utilisation de la bibliothèque pour les développeurs.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA2211
// The code that's violating the rule is on this line.
#pragma warning restore CA2211
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA2211.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemple
L’exemple suivant montre un type qui enfreint cette règle.
Imports System
Namespace ca2211
Public Class SomeStaticFields
' Violates rule: AvoidNonConstantStatic;
' the field is public and not a literal.
Public Shared publicField As DateTime = DateTime.Now
' Satisfies rule: AvoidNonConstantStatic.
Public Shared ReadOnly literalField As DateTime = DateTime.Now
' Satisfies rule: NonConstantFieldsShouldNotBeVisible;
' the field is private.
Private Shared privateField As DateTime = DateTime.Now
End Class
End Namespace
public class SomeStaticFields
{
// Violates rule: AvoidNonConstantStatic;
// the field is public and not a literal.
static public DateTime publicField = DateTime.Now;
// Satisfies rule: AvoidNonConstantStatic.
public static readonly DateTime literalField = DateTime.Now;
// Satisfies rule: NonConstantFieldsShouldNotBeVisible;
// the field is private.
static DateTime privateField = DateTime.Now;
}