CA2015 : Ne pas définir de finaliseurs pour les types dérivés de MemoryManager<T>
Propriété | Value |
---|---|
Identificateur de la règle | CA2015 |
Titre | Ne pas définir de finaliseurs pour les types dérivés de MemoryManager<T> |
Catégorie | Fiabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre d’avertissement |
Cause
Définition de finaliseurs pour les types dérivés de MemoryManager<T>
Description de la règle
L’ajout d’un finaliseur à un type dérivé de MemoryManager<T> est probablement une indication d’un bogue, car cela suggère qu’une ressource native qui aurait pu être distribuée dans un Span<T> est nettoyée, potentiellement pendant qu’elle est encore en cours d’utilisation par Span<T>.
Notes
La classe MemoryManager<T> s’applique à des scénarios avancés. La plupart des développeurs n’ont pas besoin de l’utiliser.
Comment corriger les violations
Pour corriger la violation, supprimez la définition du finaliseur.
class DerivedClass <T> : MemoryManager<T>
{
public override bool Dispose(bool disposing)
{
if (disposing)
{
_handle.Dispose();
}
}
...
// Violation occurs, remove the finalizer to fix the warning.
~DerivedClass() => Dispose(false);
}
Quand supprimer les avertissements
Il est sûr de supprimer une violation de cette règle si l’intention est de créer un finaliseur à des fins de débogage ou de validation.
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 CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
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.CA2015.severity = none
Pour désactiver la catégorie entière des règles, définissez la gravité de la catégorie sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.