CA2220 : Les finaliseurs doivent appeler le finaliseur de leur classe de baseCA2220: Finalizers should call base class finalizer

TypeNameTypeName FinalizersShouldCallBaseClassFinalizerFinalizersShouldCallBaseClassFinalizer
CheckIdCheckId CA2220CA2220
CategoryCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Un type qui substitue System.Object.Finalize n’appelle pas la Finalize méthode dans sa classe de base.A type that overrides System.Object.Finalize does not call the Finalize method in its base class.

Description de la règleRule description

La finalisation doit être propagée par le biais de la hiérarchie d'héritage.Finalization must be propagated through the inheritance hierarchy. Pour ce faire, les types doivent appeler leur classe de base Finalize méthode à partir de leurs propres Finalize (méthode).To ensure this, types must call their base class Finalize method from within their own Finalize method. Le compilateur c# ajoute automatiquement l’appel au finaliseur de la classe de base.The C# compiler adds the call to the base class finalizer automatically.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, appelez le type de base Finalize méthode à partir de votre Finalize (méthode).To fix a violation of this rule, call the base type's Finalize method from your Finalize method.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule. Certains compilateurs qui ciblent le common language runtime insérer un appel à un finaliseur du type de base en langage intermédiaire Microsoft (MSIL).Some compilers that target the common language runtime insert a call to the base type's finalizer into the Microsoft intermediate language (MSIL). Si un avertissement de cette règle est signalé, votre compilateur n’insère pas de l’appel, et vous devez l’ajouter à votre code.If a warning from this rule is reported, your compiler does not insert the call, and you must add it to your code.

ExempleExample

L’exemple Visual Basic suivant illustre un type TypeB qui appelle correctement le Finalize méthode dans sa classe de base.The following Visual Basic example shows a type TypeB that correctly calls the Finalize method in its base class.

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