Sichtbare Instanzenfelder nicht deklarieren
Aktualisiert: November 2007
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. Der Zugriff auf eine Eigenschaft ist ebenso einfach wie der Zugriff auf ein Feld, und der Code in Accessoren einer Eigenschaft kann bei einer Erweiterung der Features des Typs modifiziert werden, ohne dass dadurch eine unterbrechende Änderung vorgenommen wird. 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 keinen 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).
Behandlung 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. Siehe Gesicherte Typen sollten keine Felder verfügbar machen.
Beispiel
Im folgenden Beispiel wird ein Typ (BadPublicInstanceFields) dargestellt, 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
Gesicherte Typen sollten keine Felder verfügbar machen