CA1051: Sichtbare Instanzfelder nicht deklarieren
TypeName |
DoNotDeclareVisibleInstanceFields |
CheckId |
CA1051 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein extern sichtbarer Typ verfügt über ein extern sichtbares Instanzenfeld.
Regelbeschreibung
Ein Feld sollte primär als Implementierungsdetail verwendet werden. Felder sollten private oder internal sein und durch Verwendung von Eigenschaften verfügbar gemacht werden. Auf eine Eigenschaft kann genau so einfach wie auf ein Feld zugegriffen werden. Der Code in den Accessoren einer Eigenschaft kann sich ändern, wenn die Funktionen des Typs erweitert werden. Änderungen, die die Lauffähigkeit der Anwendung beeinträchtigen, werden nicht vorgenommen. Eigenschaften, die lediglich den Wert eines privaten oder internen Felds zurückgeben, sind optimiert, sodass ihre Leistung derjenigen des Zugriffs auf ein Feld entspricht. Die Verwendung extern sichtbarer Felder bedeutet nur einen geringen Leistungszuwachs gegenüber der Verwendung von Eigenschaften.
Extern sichtbar bezieht sich auf die Zugriffsebenen public, protected und protected internal (Public, Protected und Protected Friend in Visual Basic).
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, definieren Sie das Feld als private oder internal, und stellen Sie es mithilfe einer extern sichtbaren Eigenschaft zur Verfügung.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel. Extern sichtbare Felder bieten keine Vorteile, die Eigenschaften nicht zur Verfügung stehen. Zusätzlich können öffentliche Felder nicht durch Verknüpfungsaufrufe geschützt werden. Weitere Informationen finden Sie unter CA2112: Gesicherte Typen sollten keine Felder verfügbar machen..
Beispiel
Im folgenden Beispiel wird ein Typ veranschaulicht (BadPublicInstanceFields), der gegen diese Regel verstößt. GoodPublicInstanceFields zeigt den korrigierten Code.
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 ; }
}
}
}
Verwandte Regeln
CA2112: Gesicherte Typen sollten keine Felder verfügbar machen.