(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

IDisposable.Dispose-Methode

Führt anwendungsspezifische Aufgaben aus, die mit dem Freigeben, Zurückgeben oder Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

abstract Dispose : unit -> unit 

Mit dieser Methode werden nicht verwaltete Ressourcen wie Dateien, Streams und Handles, die für eine Instanz der diese Schnittstelle implementierenden Klasse reserviert sind, geschlossen oder freigegeben. Standardmäßig wird diese Methode für alle Aufgaben verwendet, die dem Freigeben von den Ressourcen zugeordnet werden, die von einem Objekt verwendet werden, oder das Vorbereiten eines Objekts zur Wiederverwendung.

WarnhinweisVorsicht

Wenn Sie eine Klasse verwenden, die die IDisposable-Schnittstelle implementiert, müssen Sie seine Dispose Implementierung aufrufen, wenn mit der Klasse beendet werden. Weitere Informationen finden Sie im Abschnitt "Verwenden eines Objekts, das Abschnitt IDisposable" im Thema IDisposable implementiert.

Stellen Sie bei Implementierung dieser Methode sicher, dass alle reservierten Ressourcen freigegeben werden, indem der Aufruf durch die Kapselungshierarchie weitergeleitet wird. Zum Beispiel wenn ein Objekt A ein Objekt B zuordnet, und Objekt B Objekt C zuordnet, dann muss die Dispose-Implementierung von A Dispose für B aufrufen, der dann Dispose für C aufrufen muss.

Wichtiger HinweisWichtig

C++-Programmierer sollten Destruktoren und Finalizer in Visual C++ lesen. Der C++-Compiler unterstützt deterministische Freigabe von Ressourcen und lässt keine direkte Implementierung der Dispose-Methode.

Ein Objekt muss auch die Dispose-Methode seiner Basisklasse aufrufen, wenn die Basisklasse IDisposable implementiert. Weitere Informationen zum Implementieren von IDisposable in einer Basisklasse und seinen Unterklassen finden Sie im Abschnitt "IDisposable und der Vererbungshierarchie" im Thema IDisposable.

Wenn die Dispose-Methode eines Objekts mehrfach aufgerufen wird, muss das Objekt alle auf den ersten Aufruf folgenden Aufrufe ignorieren. Das Objekt darf keine Ausnahme auslösen, wenn seine Dispose-Methode mehrmals aufgerufen wird. Andere Instanzmethoden als Dispose können eine ObjectDisposedException auslösen, wenn Ressourcen bereits verworfen wurden.

Möglicherweise erwarten die Benutzer, dass ein Ressourcentyp eine bestimmte Vereinbarung zur Unterscheidung zwischen einer zugeordneten und einer freigegebenen Ressource verwendet. Ein Beispiel hierfür sind Streamklassen, von denen traditionell als geöffnet oder geschlossen gesprochen wird. Die Implementierung einer Klasse, die eine solche Konvention hat, beschlösse werden, um eine öffentliche Methode mit benutzerdefiniertem Namen, wie Close zu implementieren, der die Dispose-Methode aufruft.

Da die Dispose-Methode explizit aufgerufen werden muss, gibt es immer eine Gefahr, dass die nicht verwaltete Ressourcen nicht freigegeben werden, da Consumer eines Objekts die Dispose-Methode nicht aufrufen kann. Es gibt zwei Möglichkeiten, dies zu verhindern:

  • Binden Sie die verwaltete Ressource in einem Objekt auf, das von System.Runtime.InteropServices.SafeHandle abgeleitet wird. Ihre Dispose Implementierung ruft dann die Dispose-Methode der System.Runtime.InteropServices.SafeHandle-Instanzen auf. Weitere Informationen finden Sie unter "alternativen" Abschnitt SafeHandle im Thema Object.Finalize.

  • Implementieren Sie einen Finalizer um Ressourcen freizugeben, wenn Dispose nicht aufgerufen wird. Standardmäßig ruft der Garbage Collector automatisch den Finalizer eines Objekts auf, bevor er den Speicher freigibt. Wenn die Dispose-Methode aufgerufen wurde, ist in der Regel nicht für die Garbage Collector, welcher Finalizer des verworfenen Objekts aufzurufen. Implementierungen von Dispose können die GC.SuppressFinalize-Methode aufrufen, um die automatische Finalisierung zu verhindern.

Wenn Sie ein Objekt verwenden, das auf nicht verwaltete Ressourcen, z. B. ein StreamWriter, zugreift, ist eine empfohlene Vorgehensweise, die Instanz mit einer using-Anweisung zu erstellen. Die using-Anweisung schließt automatisch den Stream und ruft Dispose für das Objekt auf, wenn der Code, in dem das Objekt verwendet wird, abgeschlossen wurde. Ein Beispiel finden Sie unter der StreamWriter-Klasse.

Im folgenden Beispiel wird die Implementierung der Dispose-Methode veranschaulicht.

Derzeit ist kein Code Beispiel verfügbar, oder die Sprache wird nicht unterstützt.

.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft