Share via


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

Siehe auch

Konzepte

Verknüpfungsaufrufe