Share via


CA1859: Gebruik indien mogelijk betontypen voor verbeterde prestaties

Eigenschappen Weergegeven als
Regel-id CA1859
Titel Gebruik indien mogelijk betontypen voor betere prestaties
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Geïntroduceerde versie .NET 8
Standaard ingeschakeld in .NET 9 Als suggestie

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 betontypen leidt tot een hogere kwaliteit gegenereerde code door overhead voor virtuele of interfaceverzending 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.

Schendingen oplossen

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

Opmerking

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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.