CA1859 : Utiliser des types concrets lorsque cela est possible pour améliorer les performances
Propriété | Value |
---|---|
Identificateur de la règle | CA1859 |
Titre | Utiliser des types concrets lorsque cela est possible pour améliorer les performances |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Version introduite | .NET 8 |
Activée par défaut dans .NET 9 | À titre de suggestion |
Cause
Le code utilise des types d’interface ou des types abstraits, ce qui entraîne des appels d’interface ou des appels virtuels inutiles.
Description de la règle
Cette règle recommande de mettre à niveau le type des variables locales, des champs, des propriétés, des paramètres de méthode et des types de retour de méthode à partir de types d’interface ou abstraits vers des types concrets lorsque cela est possible. L’utilisation de types concrets permet d’obtenir du code généré de meilleure qualité en réduisant la surcharge de dispatch virtuel ou d’interface et en activant l’inlining.
Cette règle ne signale les violations que lorsqu’il existe des appels virtuels ou d’interface qui peuvent être évités en utilisant un type concret.
Comment corriger les violations
Mettez à niveau les types comme recommandé par la règle. En général, la modification du type n’a aucun effet sur le comportement du code, mais cela améliore ses performances.
Exemple
L’extrait de code suivant montre une violation de 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();
}
}
L’extrait de code suivant corrige la violation :
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();
}
}
Quand supprimer les avertissements
Vous pouvez supprimer un avertissement en toute sécurité si les performances ne constituent pas un problème.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.