Compartir a través de


CA1051: No declarar campos de instancia visibles

Nombre de tipo

DoNotDeclareVisibleInstanceFields

Identificador de comprobación

CA1051

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo visible externamente tiene un campo de instancia visible externamente.

Descripción de la regla

El uso principal de un campo debe ser como un detalle de implementación.Los campos debe ser private o internal y deberían exponerse utilizando las propiedades.Es tan fácil tener acceso a una propiedad como tener acceso a un campo, y el código de los descriptores de acceso de una propiedad puede cambiar conforme se expanden las características del tipo sin introducir cambios importantes.Las propiedades que solo devuelven el valor de un campo privado o interno están optimizadas para desempeñarse en conjunto con el campo al que obtienen acceso; y el rendimiento mejora muy poco con el uso de campos visibles externamente en lugar de con propiedades.

Si es visible externamente hace referencia a public, protected y a los niveles de accesibilidad protected internal (Public, Protected y Protected Friend en Visual Basic).

Cómo corregir infracciones

Para corregir una infracción de esta regla, marque el campo como private o internal y expóngalo utilizando una propiedad visible externamente.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.Los campos externamente visibles no proporcionan ningún beneficio que no esté disponible para las propiedades.Además, Peticiones de vínculos no puede proteger los campos públicos.Vea CA2112: Los tipos seguros no deberían exponer campos.

Ejemplo

En el siguiente ejemplo se muestra un tipo (BadPublicInstanceFields) que infringe esta regla.GoodPublicInstanceFields muestra el código corregido.

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

Reglas relacionadas

CA2112: Los tipos seguros no deberían exponer campos

Vea también

Conceptos

Peticiones de vínculos