CA1070: Não declarar os campos de evento como virtuais
Property | Valor |
---|---|
ID da regra | CA1070 |
Título | Não declarar os campos de evento como virtuais |
Categoria | Projetar |
Correção interruptiva ou sem interrupção | Quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Um evento do tipo campo foi declarado como virtual.
Por padrão, essa regra apenas analisa os tipos visíveis externamente, mas isso é configurável.
Descrição da regra
Siga estas diretrizes de design do .NET para gerar eventos de classe base em classes derivadas. Não declare eventos virtuais em uma classe base. Eventos substituídos em uma classe derivada têm um comportamento indefinido. O compilador C# não lida com isso corretamente e é imprevisível se um assinante do evento derivado realmente estará assinando o evento de classe base.
using System;
public class C
{
// CA1070: Event 'ThresholdReached' should not be declared virtual.
public virtual event EventHandler ThresholdReached;
}
Como corrigir violações
Siga estas diretrizes de design do .NET e evite eventos semelhantes a campos virtuais.
Quando suprimir avisos
Se o evento for uma API pública externamente visível que já faz parte de uma biblioteca enviada, será seguro suprimir um aviso dessa regra para evitar uma alteração interruptiva aos consumidores da biblioteca.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1070
// The code that's violating the rule is on this line.
#pragma warning restore CA1070
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1070.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Design) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal