CA1051: No declarar campos de instancia visibles
TypeName |
DoNotDeclareVisibleInstanceFields |
Identificador de comprobación |
CA1051 |
Categoría |
Microsoft.Design |
Cambio problemático |
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