Finalizer sollten Basisklassen-Finalizer aufrufen
TypeName |
FinalizersShouldCallBaseClassFinalizer |
CheckId |
CA2220 |
Kategorie |
Microsoft.Usage |
Unterbrechende Änderung |
NonBreaking |
Ursache
Ein Typ, der System.Object.Finalize überschreibt, ruft die Finalize-Methode in seiner Basisklasse nicht auf.
Regelbeschreibung
Der Abschluss muss durch die Vererbungshierarchie weitergegeben werden. Um dies sicherzustellen, müssen die Typen die Finalize-Methode ihrer Basisklasse innerhalb ihrer eigenen Finalize-Methode aufrufen. Der C#-Compiler fügt den Aufruf automatisch dem Basisklassenfinalizer hinzu.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, rufen Sie die Finalize-Methode des Basistyps in der Finalize-Methode auf.
Warnungsausschluss
Schließen Sie keine Warnung dieser Regel aus. Einige Compiler, die auf die Common Language Runtime abzielen, fügen in die Microsoft Intermediate Language (MSIL) einen Aufruf des Finalizers des Basistyps ein. Wenn eine Warnung dieser Regel gemeldet wird, fügt der Compiler den Aufruf nicht ein, sodass Sie ihn in Ihren Code einfügen müssen.
Beispiel
Das folgende Visual Basic-Beispiel zeigt den Typ TypeB
, durch den die Finalize-Methode in seiner Basisklasse ordnungsgemäß aufgerufen wird.
Imports System
Imports UsageLibrary
Namespace UsageLibrary
Public Class TypeB
Inherits TypeA
Protected Overrides Sub Dispose(disposing As Boolean)
Try
If disposing Then
' dispose managed resources
End If
' free native resources
Finally
' satisfies rule: DisposeMethodsShouldCallBaseClassDispose
MyBase.Dispose(disposing)
End Try
End Sub 'Dispose
End Class 'TypeB
End Namespace
using System;
namespace UsageLibrary
{
public class TypeB : TypeA
{
protected override void Dispose(bool disposing)
{
try
{
if (disposing)
{
// Dispose managed resources
}
// free native resources
}
finally
{
// Satisfies rule: DisposeMethodsShouldCallBaseClassDispose.
base.Dispose(disposing);
}
}
}
}
Siehe auch
Referenz
Implementieren der Methoden "Finalize" und "Dispose" zum Bereinigen von nicht verwalteten Ressourcen