Partager via


Ne pas déclarer de champs d'instances visibles

Mise à jour : novembre 2007

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. L'accès à une propriété est aussi facile que l'accès à un champ, et le code intégré aux accesseurs d'une propriété peut évoluer à mesure de l'expansion des caractéristiques du type 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 ; aucun gain de performance n'est associé à l'utilisation de champs visibles de l'extérieur au lieu de propriétés.

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 Les types sécurisés ne doivent pas exposer de champs.

Exemple

L'exemple suivant présente un type (BadPublicInstanceFields) qui enfreint cette règle. GoodPublicInstanceFields présente 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

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

Voir aussi

Concepts

Demandes de liaison