CA2215 : Les méthodes Dispose doivent appeler la fonction Dispose de la classe de base
TypeName |
DisposeMethodsShouldCallBaseClassDispose |
CheckId |
CA2215 |
Catégorie |
Microsoft.Usage |
Modification avec rupture |
Modification sans rupture |
Cause
Un type qui implémente System.IDisposable hérite d'un type qui implémente également IDisposable.La méthode Dispose du type héritant n'appelle pas la méthode Dispose du type parent.
Description de la règle
Si un type hérite d'un type pouvant être supprimé, il doit appeler la méthode Dispose du type de base issu de sa propre méthode Dispose.L'appel de la méthode de type de base Dispose garantit que toutes ressources créées par le type de base sont diffusées.
Comment corriger les violations
Pour corriger une violation de cette règle, appelez base.Dispose dans votre méthode Dispose.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle si l'appel à base.Dispose se produit à un niveau d'appel subordonné à celui que la règle contrôle.
Exemple
L'exemple suivant présente un type TypeA qui implémente IDisposable.
using System;
namespace UsageLibrary
{
public class TypeA :IDisposable
{
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Dispose managed resources
}
// Free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Disposable types implement a finalizer.
~TypeA()
{
Dispose(false);
}
}
}
L'exemple suivant présente un type TypeB qui hérite du type TypeA et appelle correctement sa méthode Dispose.
Imports System
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Protected Overrides Sub Finalize()
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub
End Class
End Namespace