CA1859: Usar tipos concretos quando possível para aprimorar o desempenho
Property | Valor |
---|---|
ID da regra | CA1859 |
Título | Usar tipos concretos quando possível para melhorar o desempenho |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Versão introduzida | .NET 8 |
Habilitado por padrão no .NET 9 | Como sugestão |
Causa
O código usa tipos de interface ou tipos abstratos, levando a chamadas de interface ou chamadas virtuais desnecessárias.
Descrição da regra
Essa regra recomenda atualizar o tipo de variáveis locais específicas, campos, propriedades, parâmetros de método e tipos de retorno de método de tipos de interface ou abstratos para tipos concretos quando possível. O uso de tipos concretos leva a um código gerado de maior qualidade ao minimizar a sobrecarga de expedição virtual ou de interface e habilitar o inlining.
Essa regra só relata violações quando há chamadas virtuais ou chamadas de interface que podem ser evitadas usando um tipo concreto.
Como corrigir violações
Atualize os tipos conforme recomendado pela regra. Em geral, alterar o tipo não tem efeito sobre o comportamento do código, mas aprimora seu desempenho.
Exemplo
O seguinte snippet de código mostra uma violação do CA1859:
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly A _a = new B();
public void Trigger()
{
// This performs a virtual call because
// _a is defined as an abstract class.
_a.M();
}
}
O seguinte snippet de código conserta a violação:
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly B _b = new B();
public void Trigger()
{
_b.M();
}
}
Quando suprimir avisos
É seguro fechar um aviso se o desempenho não é uma preocupação.
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 CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
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.CA1859.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.