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