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