CA2207: Inicializar campos estáticos de tipo de valor embutidos
Property | valor |
---|---|
ID da regra | CA2207 |
Título | Inicializar campos estáticos do tipo de valor embutidos |
Categoria | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
Um value-type declara um construtor estático explícito.
Descrição da regra
Quando um tipo de valor é declarado, ele passa por uma inicialização padrão onde 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 ser executado antes que um construtor de instância ou membro estático do tipo seja chamado. Portanto, se o tipo é criado sem chamar um construtor de instância, o construtor estático não tem garantia de execução.
Se todos os dados estáticos forem inicializados em linha e nenhum construtor estático explícito for declarado, os compiladores C# e Visual Basic adicionarão o sinalizador beforefieldinit
à 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ática. Este construtor estático privado é garantido para ser executado antes de quaisquer campos estáticos do tipo são acessados.
Como corrigir violações
Para corrigir uma violação dessa regra, inicialize todos os dados estáticos quando eles forem declarados e remova o construtor estático.
Quando suprimir avisos
Não suprima um aviso desta regra.
Regras conexas
CA1810: Inicializar campos estáticos do tipo de referência embutidos