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 |
Sí |
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