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