CA1859: Używaj typów betonowych, gdy jest to możliwe w celu zwiększenia wydajności

Właściwości Wartość
Identyfikator reguły CA1859
Tytuł Używaj konkretnych typów, gdy jest to możliwe w celu zwiększenia wydajności
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Wprowadzona wersja .NET 8
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Kod używa typów interfejsów lub typów abstrakcyjnych, co prowadzi do niepotrzebnych wywołań interfejsu lub wywołań wirtualnych.

Opis reguły

Ta reguła zaleca uaktualnienie typu określonych zmiennych lokalnych, pól, właściwości, parametrów metody i typów zwracanych metody z interfejsu lub typów abstrakcyjnych do konkretnych typów, jeśli to możliwe. Użycie konkretnych typów prowadzi do generowania kodu o wyższej jakości przez zminimalizowanie obciążenia związanego z wysyłaniem wirtualnych lub interfejsów i włączaniem tworzenia inliningu.

Ta reguła zgłasza naruszenia tylko wtedy, gdy istnieją wywołania wirtualne lub wywołania interfejsu, których faktycznie można uniknąć przy użyciu konkretnego typu.

Jak naprawić naruszenia

Uaktualnij typy zgodnie z zaleceniami reguły. Ogólnie rzecz biorąc, zmiana typu nie ma wpływu na zachowanie kodu, ale poprawia wydajność.

Przykład

Poniższy fragment kodu przedstawia naruszenie 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();
    }
}

Poniższy fragment kodu naprawia naruszenie:

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();
    }
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie, jeśli wydajność nie jest problemem.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.