Compartilhar via


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(Nothingno 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.

CA1810: Inicializar campos estáticos de tipo de referência em linha