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

Voir aussi

Référence

Implémentation des méthodes Finalize et Dispose pour nettoyer des ressources non managées

System.IDisposable