Partager via


CA1051 : Ne pas déclarer de champs d'instances visibles

TypeName

DoNotDeclareVisibleInstanceFields

CheckId

CA1051

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un type visible de l'extérieur dispose d'un champ d'instance extérieurement visible.

Description de la règle

Un champ s'utilise principalement en tant que détail d'implémentation. Les champs doivent être private ou internal et doivent être exposés au moyen de propriétés. Il est aussi facile d'accéder à une propriété qu'à un champ, et le code dans les accesseurs d'une propriété peut changer lorsque les fonctionnalités du type évoluent sans introduire de modifications avec rupture. Les propriétés qui retournent simplement la valeur d'un champ privé ou interne sont optimisées pour s'exécuter de pair avec l'accès à un champ ; le gain de performance associé à l'utilisation de champs visibles de l'extérieur au lieu de propriétés est minime.

L'expression "visible de l'extérieur" fait référence aux niveaux d'accessibilité public, protected et protected internal (Public, Protected et Protected Friend en Visual Basic).

Comment corriger les violations

Pour corriger une violation de cette règle, rendez le champ private ou internal, puis exposez-le à l'aide d'une propriété visible de l'extérieur.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle. Les champs visibles de l'extérieur ne fournissent pas tous les avantages inaccessibles aux propriétés. En outre, les champs publics ne peuvent pas être protégés par Demandes de liaison. Consultez CA2112 : Les types sécurisés ne doivent pas exposer de champs.

Exemple

L'exemple suivant présente un type, (BadPublicInstanceFields), qui ne respecte pas cette règle. GoodPublicInstanceFields affiche le code corrigé.

using System;

namespace DesignLibrary
{
   public class BadPublicInstanceFields
   {
      // Violates rule DoNotDeclareVisibleInstanceFields.
      public int instanceData = 32;
   }

   public class GoodPublicInstanceFields
   {
      private int instanceData = 32;

      public int InstanceData
      {
         get { return instanceData; }
         set { instanceData = value ; }
      }
   }
}

Règles connexes

CA2112 : Les types sécurisés ne doivent pas exposer de champs

Voir aussi

Concepts

Demandes de liaison