Partilhar via


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 8 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.

CA1810: Inicializar campos estáticos do tipo de referência embutidos