CA2207: Inicializar campos estáticos de tipo de valor em linha
Property | Valor |
---|---|
ID da regra | CA2207 |
Título | Inicializar campos estáticos de tipo de valor em linha |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Não |
Causa
Um tipo de valor declara um construtor estático explícito.
Descrição da regra
Quando um tipo de valor é declarado, ele sofre uma inicialização padrão em que todos os campos de tipo de valor são definidos como zero e todos os campos de tipo de referência são definidos como null
(Nothing
no Visual Basic). Um construtor estático explícito só tem garantia de execução antes que um construtor de instância ou membro estático do tipo seja chamado. Portanto, se o tipo for criado sem chamar um construtor de instância, não é garantido que o construtor estático seja executado.
Se todos os dados estáticos são inicializados embutidos e nenhum construtor estático explícito é declarado, os compiladores C# e Visual Basic adicionam o beforefieldinit
sinalizador à definição de classe CIL. Os compiladores também adicionam um construtor estático privado que contém o código de inicialização estático. Este construtor estático privado é garantido para ser executado antes que quaisquer campos estáticos do tipo sejam acessados.
Como corrigir violações
Para corrigir uma violação dessa regra, inicialize todos os dados estáticos quando forem declarados e remova o construtor estático.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Regras relacionadas
CA1810: Inicializar campos estáticos de tipo de referência em linha