Inicializar campos estáticos de tipo de valor en línea
Actualización: noviembre 2007
Nombre de tipo |
InitializeValueTypeStaticFieldsInline |
Identificador de comprobación |
CA2207 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No problemático |
Motivo
Un tipo de valor declara un constructor estático explícito.
Descripción de la regla
Al declarar un tipo de valor, se realiza una inicialización predeterminada en la que los campos de tipo de valor se establecen en cero y los campos de tipo de referencia se establecen en null (Nothing en Visual Basic). Un constructor estático explícito sólo garantiza la ejecución antes de llamar al constructor de la instancia o al miembro estático del tipo. Por tanto, si se crea el tipo sin haber llamado al constructor de la instancia, el constructor estático no garantiza la ejecución.
Si los datos estáticos se inicializan en línea y no se declara el constructor estático explícito, los compiladores de C# y Visual Basic agregan el indicador beforefieldinit a la definición de clase de MSIL. Además, los compiladores agregan un constructor estático privado que contiene código de inicialización estática. Este constructor estático privado garantiza la ejecución antes de obtener acceso a cualquier campo estático del tipo.
Cómo corregir infracciones
Para corregir una infracción de esta regla, inicialice todos los datos estáticos cuando se declara y quite el constructor estático.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.