Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA2211 |
| Título | Los campos no constantes no deben ser visibles |
| Categoría | Uso |
| La corrección interrumpe o no interrumpe | Ruptura |
| Habilitado de forma predeterminada en .NET 10 | Como sugerencia |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un campo estático público o protegido no es constante ni es de solo lectura.
Descripción de la regla
Los campos estáticos que no son constantes ni de solo lectura no son seguros para hilos. El acceso a este tipo de campos se debe controlar cuidadosamente, y se necesitan técnicas de programación avanzadas para sincronizar el acceso al objeto de clase. Dado que son aptitudes difíciles de aprender y probar este tipo de objeto plantea sus propios desafíos, los campos estáticos se usan mejor para almacenar datos que no cambian. Esta regla se aplica a las bibliotecas; las aplicaciones no deben exponer ningún campo.
Cómo corregir infracciones
Para corregir una infracción de esta regla, haga que el campo estático sea constante o de solo lectura. Si no es posible, vuelva a diseñar el tipo para que use un mecanismo alternativo, como una propiedad segura para subprocesos que administra el acceso seguro para subprocesos al campo subyacente. Tenga en cuenta que los problemas como la contención de bloqueos y los interbloqueos pueden repercutir en el rendimiento y el comportamiento de la biblioteca.
Cuándo suprimir las advertencias
Es seguro suprimir una advertencia bajo esta regla si está desarrollando una aplicación y, por lo tanto, tiene control total sobre el acceso al tipo que contiene el campo estático. Los diseñadores de bibliotecas no deben suprimir una advertencia de esta regla; el uso de campos estáticos no constantes puede hacer que sea difícil para los desarrolladores usar la biblioteca correctamente.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA2211
// The code that's violating the rule is on this line.
#pragma warning restore CA2211
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA2211.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Ejemplo
En el ejemplo siguiente se muestra un tipo que infringe esta regla.
Imports System
Namespace ca2211
Public Class SomeStaticFields
' Violates rule: AvoidNonConstantStatic;
' the field is public and not a literal.
Public Shared publicField As DateTime = DateTime.Now
' Satisfies rule: AvoidNonConstantStatic.
Public Shared ReadOnly literalField As DateTime = DateTime.Now
' Satisfies rule: NonConstantFieldsShouldNotBeVisible;
' the field is private.
Private Shared privateField As DateTime = DateTime.Now
End Class
End Namespace
public class SomeStaticFields
{
// Violates rule: AvoidNonConstantStatic;
// the field is public and not a literal.
static public DateTime publicField = DateTime.Now;
// Satisfies rule: AvoidNonConstantStatic.
public static readonly DateTime literalField = DateTime.Now;
// Satisfies rule: NonConstantFieldsShouldNotBeVisible;
// the field is private.
static DateTime privateField = DateTime.Now;
}