Compartir a través de


No declarar campos de instancias visibles

Actualización: noviembre 2007

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. Obtener acceso a una propiedad es tan sencillo como obtener acceso a un campo, y el código de los descriptores de acceso de la propiedad puede cambiar cuando se expandan las características del tipo sin introducir cambios importantes. Las propiedades que sólo 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 no se logra un mejor rendimiento usando campos externamente visibles que usando 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 externamente visible.

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 Los tipos seguros no deberían exponer campos.

Ejemplo

El ejemplo siguiente 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

Los tipos seguros no deberían exponer campos

Vea también

Conceptos

Peticiones de vínculos