CA1859: Gebruik indien mogelijk betontypen voor verbeterde prestaties

Eigenschap Waarde
Regel-id CA1859
Titel Gebruik indien mogelijk betontypen voor betere prestaties
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Geïntroduceerde versie .NET 8
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Code maakt gebruik van interfacetypen of abstracte typen, wat leidt tot onnodige interfaceaanroepen of virtuele aanroepen.

Beschrijving van regel

Deze regel raadt u aan het type specifieke lokale variabelen, velden, eigenschappen, methodeparameters en methode-retourtypen bij te voeren van interface- of abstracte typen naar concrete typen, indien mogelijk. Het gebruik van concrete typen leidt tot een hogere kwaliteit van de gegenereerde code door de virtuele of interface dispatch overhead te minimaliseren en inlining mogelijk te maken.

Deze regel rapporteert alleen schendingen wanneer er virtuele aanroepen of interface-aanroepen zijn die daadwerkelijk kunnen worden vermeden met behulp van een concreet type.

Hoe schendingen op te lossen

Werk de typen bij zoals de regel aanbeveelt. Over het algemeen heeft het wijzigen van het type geen effect op het gedrag van de code, maar verbetert de prestaties.

Voorbeeld

In het volgende codefragment ziet u een schending van 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();
    }
}

Met het volgende codefragment wordt de schending opgelost:

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

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing te onderdrukken als de prestaties geen probleem zijn.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.