Object.Finalize-Methode
Gibt einem Object Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor das Object von der Garbage Collection freigegeben wird.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Protected Overridable Sub Finalize
'Usage
Me.Finalize
~Object()
!Object ()
protected void finalize ()
protected function Finalize ()
Hinweise
Finalize ist geschützt und kann daher nur über diese oder eine abgeleite Klasse aufgerufen werden.
Diese Methode wird automatisch aufgerufen, wenn auf das Objekt kein Zugriff mehr möglich ist, es sei denn, es wurde durch einen Aufruf von SuppressFinalize von der Finalisierung ausgenommen. Beim Herunterfahren einer Anwendungsdomäne wird für alle nicht von der Finalisierung ausgenommenen Objekte automatisch Finalize aufgerufen, auch dann, wenn der Zugriff noch möglich ist. Finalize wird für eine bestimmte Instanz nur einmal automatisch aufgerufen, es sei denn, das Objekt wird über einen Mechanismus wie ReRegisterForFinalize erneut registriert und GC.SuppressFinalize wurde danach nicht aufgerufen.
Jede Implementierung von Finalize in einem abgeleiteten Typ muss die Finalize-Implementierung des Basistyps aufrufen. Dies ist der einzige Fall, in dem Anwendungscode Finalize aufrufen darf.
Die Durchführung von Finalize unterliegt folgenden Einschränkungen:
Der genaue Zeitpunkt, zu dem der Finalizer während der Garbage Collection ausgeführt wird, ist undefiniert. Es ist nicht garantiert, dass Ressourcen zu einem bestimmten Zeitpunkt freigegeben werden, es sei denn, es wird eine Close-Methode oder eine Dispose-Methode aufgerufen.
Es ist nicht gewährleistet, dass die Finalizer zweier Objekte in einer bestimmten Reihenfolge ausgeführt werden, selbst dann nicht, wenn eines der Objekte auf das andere verweist. Wenn Objekt A einen Verweis auf Objekt B enthält und beide Finalizer besitzen, könnte Objekt B daher bereits finalisiert worden sein, wenn der Finalizer von Objekt A aufgerufen wird.
Der Thread, in dem der Finalizer aufgerufen wird, ist unbestimmt.
Die Finalize-Methode wird unter den folgenden außergewöhnlichen Umständen möglicherweise nicht vollständig oder überhaupt nicht ausgeführt:
Ein anderer Finalizer ist auf unbestimmte Zeit blockiert (er befindet sich in einer Endlosschleife oder versucht, eine Sperre zur erhalten, deren Erhalt ihm nicht gewährt werden wird usw.). Da die Laufzeit versucht, Finalizer bis zum Ende auszuführen, werden andere Finalizer möglicherweise nicht ausgeführt, wenn ein Finalizer auf unbestimmte Zeit blockiert ist.
Der Prozess wird beendet, ohne dass die Laufzeit die Möglichkeit hatte, eine Bereinigung durchzuführen. In diesem Falle ist die erste Benachrichtigung der Laufzeit über die Beendigung des Prozesses eine DLL_PROCESS_DETACH-Benachrichtigung.
Die Laufzeit setzt das Ausführen von Finalize für Objekte während des Herunterfahrens nur so lange fort, wie die Anzahl der finalisierbaren Objekte sinkt.
Wenn Finalize oder eine Überschreibung von Finalize eine Ausnahme auslöst, und die Laufzeit nicht von einer Anwendung gehostet wird, die die Standardrichtlinie überschreibt, beendet die Laufzeit den Prozess, und es werden keine aktiven try-finally-Blöcke oder Finalizer ausgeführt. So wird Prozessintegrität sichergestellt, wenn der Finalizer Ressourcen nicht freigeben oder zerstören kann.
Hinweise für Implementierer Object.Finalize hat in der Standardeinstellung keine Wirkung. Nur wenn nötig, darf dies durch eine abgeleitete Klasse überschrieben werden, da das Freigeben während der Garbage Collection i. d. R. länger dauert, wenn ein Finalize-Vorgang durchgeführt werden muss. Wenn ein Object Verweise auf Ressourcen enthält, muss Finalize von einer abgeleiteten Klasse überschrieben werden, damit diese Ressourcen freigegeben werden, bevor das Object während der Garbage Collection verworfen wird. Ein Typ muss Finalize implementieren, wenn er nicht verwaltete Ressourcen wie Dateihandles oder Datenbankverbindungen verwendet, die ebenfalls freigegeben werden müssen, wenn das verwaltete Objekt, das sie verwendet, freigegeben wird. Zusätzliche und besser steuerbare Möglichkeiten der Ressourcenfreigabe finden Sie unter der IDisposable-Schnittstelle. Finalize kann beliebige Aktionen durchführen, z. B. kann ein Objekt wieder zugänglich gemacht werden, nachdem es während der Garbage Collection bereinigt wurde. Ein Objekt kann allerdings nur einmal wieder zugänglich gemacht werden. Finalize kann während der Garbage Collection nicht für wieder zugänglich gemachte Objekte aufgerufen werden.
Destruktoren stellen das C#-Verfahren zur Durchführung von Bereinigungsaktionen dar. Destruktoren enthalten entsprechende Sicherheitsmaßnahmen, z. B. wird der Destruktor des Basistyps automatisch aufgerufen. In C# kann Object.Finalize weder aufgerufen noch überschrieben werden.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
Object-Klasse
Object-Member
System-Namespace
GC-Klasse
WeakReference