Freigeben über


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.

Siehe auch

Konzepte

Verknüpfungsaufrufe