Les finaliseurs doivent appeler le finaliseur de leur classe de base
Mise à jour : novembre 2007
TypeName |
FinalizersShouldCallBaseClassFinalizer |
CheckId |
CA2220 |
Catégorie |
Microsoft.Usage |
Modification avec rupture |
Modification sans rupture |
Cause
Un type qui substitue Object.Finalize n'appelle pas la méthode Finalize dans sa classe de base.
Description de la règle
La finalisation doit être propagée par le biais de la hiérarchie d'héritage. Pour garantir ce procédé, les types doivent appeler leur méthode Finalize de classe de base à partir de leur propre méthode Finalize. Le compilateur C# ajoute automatiquement l'appel au finaliseur de classe de base.
Comment corriger les violations
Pour corriger une violation de cette règle, appelez la méthode Finalize du type de base de votre méthode Finalize.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle. Certains compilateurs qui ciblent le Common Language Runtime insèrent un appel au finaliseur du type de base dans le langage intermédiaire de Microsoft, MSIL (MicroSoft Intermediate Language). Si un avertissement issu de cette règle est rapporté, votre compilateur n'insère pas l'appel, et vous devez l'ajouter à votre code.
Exemple
L'exemple Visual Basic suivant présente un type TypeB qui appelle correctement la méthode Finalize dans sa classe de base.
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