Condividi tramite


CA1051: Non dichiarare campi di istanza visibili

TypeName

DoNotDeclareVisibleInstanceFields

CheckId

CA1051

Category

Microsoft.Design

Breaking Change

Breaking

Causa

Un tipo visibile esternamente dispone di un campo istanza visibile esternamente.

Descrizione della regola

L'utilizzo principale di un campo deve essere come dettaglio di implementazione. I campi devono essere private o internal e devono essere esposti mediante le proprietà. L'accesso a una proprietà è tanto semplice quanto l'accesso a un campo e il codice nelle funzioni di accesso di una proprietà può cambiare con l'espandersi delle funzionalità del tipo senza introdurre modifiche sostanziali. Le proprietà che restituiscono solo il valore di un campo privato o interno sono ottimizzate per l'esecuzione analoga all'accesso a un campo; l'utilizzo di campi visibili esternamente rispetto alle proprietà comporta un lieve vantaggio in termini di prestazioni.

La visibilità esterna fa riferimento ai livelli di accessibilità public, protected e protected internal (Public, Protected e Protected Friend in Visual Basic).

Come correggere le violazioni

Per correggere una violazione di questa regola, rendere il campo private o internal ed esporlo mediante una proprietà visibile esternamente.

Esclusione di avvisi

Non escludere un avviso da questa regola. I campi visibili esternamente non forniscono vantaggi non disponibili alle proprietà. Inoltre, i campi pubblici non possono essere protetti da Richieste di collegamento. Vedere CA2112: I tipi protetti non devono esporre campi.

Esempio

Nell'esempio riportato di seguito viene illustrato un tipo BadPublicInstanceFields che viola questa regola. GoodPublicInstanceFields mostra il codice corretto.

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 ; }
      }
   }
}

Regole correlate

CA2112: I tipi protetti non devono esporre campi

Vedere anche

Concetti

Richieste di collegamento