CA1859: Pro zvýšení výkonu používejte konkrétní typy, pokud je to možné
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1859 |
Název | Pokud je to možné, použijte konkrétní typy pro lepší výkon. |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Zavedená verze | .NET 8 |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Kód používá typy rozhraní nebo abstraktní typy, což vede k zbytečným voláním rozhraní nebo virtuálním voláním.
Popis pravidla
Toto pravidlo doporučuje upgradovat typ konkrétních místních proměnných, polí, vlastností, parametrů metody a návratových typů z rozhraní nebo abstraktních typů na konkrétní typy, pokud je to možné. Použití konkrétních typů vede k vyšší kvalitě generovaného kódu minimalizací režie při odesílání virtuálních nebo rozhraní a povolením vkládání.
Toto pravidlo hlásí porušení pouze v případě, že existují virtuální volání nebo volání rozhraní, kterým se ve skutečnosti lze vyhnout použitím konkrétního typu.
Jak opravit porušení
Upgradujte typy podle doporučení pravidla. Obecně platí, že změna typu nemá žádný vliv na chování kódu, ale zlepšuje jeho výkon.
Příklad
Následující fragment kódu ukazuje porušení 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();
}
}
Následující fragment kódu opraví porušení zásad:
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();
}
}
Kdy potlačit upozornění
Pokud výkon není problém, je bezpečné potlačit upozornění.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.