Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.