CA1859: Use tipos de concreto quando possível para melhorar o desempenho
Property | valor |
---|---|
ID da regra | CA1859 |
Título | Use tipos de concreto sempre que possível para melhorar o desempenho |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Versão introduzida | .NET 8 |
Habilitado por padrão no .NET 9 | Como sugestão |
Motivo
O código usa tipos de interface ou tipos abstratos, levando a chamadas de interface desnecessárias ou chamadas virtuais.
Descrição da regra
Esta 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, minimizando a sobrecarga de despacho virtual ou de interface e permitindo o inlining.
Esta regra só relata violações quando há chamadas virtuais ou chamadas de interface que podem realmente 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 melhora seu desempenho.
Exemplo
O trecho de código a seguir mostra uma violação de 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 trecho de código a seguir corrige 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 suprimir um aviso se o desempenho não for uma preocupação.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.