CA2215 : Les méthodes Dispose doivent appeler la fonction Dispose de la classe de baseCA2215: Dispose methods should call base class dispose

TypeNameTypeName DisposeMethodsShouldCallBaseClassDisposeDisposeMethodsShouldCallBaseClassDispose
CheckIdCheckId CA2215CA2215
CatégorieCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Un type qui implémente System.IDisposable hérite d’un type qui implémente également IDisposable.A type that implements System.IDisposable inherits from a type that also implements IDisposable. Le Dispose méthode du type héritant n’appelle pas la Dispose méthode du type parent.The Dispose method of the inheriting type does not call the Dispose method of the parent type.

Description de la règleRule Description

Si un type hérite d’un type pouvant être supprimé, il doit appeler la Dispose méthode du type de base à partir de son propre Dispose (méthode).If a type inherits from a disposable type, it must call the Dispose method of the base type from within its own Dispose method. Appel de la méthode de type de base Dispose garantit que toutes les ressources créées par le type de base sont libérées.Calling the base type method Dispose ensures that any resources created by the base type are released.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, appelez base.DisposeTo fix a violation of this rule, call base.Dispose dans votre Dispose (méthode).in your Dispose method.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle si l’appel à base.DisposeIt is safe to suppress a warning from this rule if the call to base.Dispose se produit à un niveau d’appel inférieur à la règle de contrôle.occurs at a deeper calling level than the rule checks.

ExempleExample

L’exemple suivant montre un type TypeA qui implémente IDisposable.The following example shows a type TypeA that implements 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);
        }
    }
}

ExempleExample

L’exemple suivant montre un type TypeB qui hérite du type TypeA et appelle son Dispose (méthode).The following example shows a type TypeB that inherits from type TypeA and correctly calls its Dispose method.

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 aussiSee Also

System.IDisposable Modèle de suppressionSystem.IDisposable Dispose Pattern