CA1859: Usare tipi concreti quando possibile per migliorare le prestazioni
Proprietà | valore |
---|---|
ID regola | CA1859 |
Title | Usare tipi concreti quando possibile per migliorare le prestazioni |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Versione introdotta | .NET 8 |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
Il codice usa tipi di interfaccia o tipi astratti, causando chiamate di interfaccia non necessarie o chiamate virtuali.
Descrizione regola
Questa regola consiglia di aggiornare il tipo di variabili locali, campi, proprietà, parametri dei metodi e tipi restituiti dai metodi specifici da tipi interfaccia o astratti a tipi concreti, quando possibile. L'uso di tipi concreti comporta una maggiore qualità del codice generato riducendo al minimo il sovraccarico dell'invio virtuale o dell'interfaccia e abilitando l'inlining.
Questa regola segnala solo violazioni quando sono presenti chiamate virtuali o chiamate di interfaccia che possono essere effettivamente evitate usando un tipo concreto.
Come correggere le violazioni
Aggiornare i tipi come consigliato dalla regola. In generale, la modifica del tipo non ha alcun effetto sul comportamento del codice, ma ne migliora le prestazioni.
Esempio
Il frammento di codice seguente mostra una violazione di 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();
}
}
Il frammento di codice seguente corregge la violazione:
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();
}
}
Quando eliminare gli avvisi
È sicuro eliminare un avviso se le prestazioni non sono un problema.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.