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. Diese Methode wird traditionell für alle Aufgaben verwendet, die mit der Freigabe der für ein Objekt reservierten Ressourcen oder mit der Vorbereitung der Wiederverwendung eines Objekts zusammenhängen.
Wichtiger Hinweis: |
|---|
C++-Programmierer sollten Destructors and Finalizers in Visual C++ lesen. In .NET Framework, Version 2.0, unterstützt der C++-Compiler das Implementieren der deterministischen Freigabe von Ressourcen und verhindert das direkte Implementieren der Dispose-Methode. |
Stellen Sie bei Implementierung dieser Methode sicher, dass alle reservierten Ressourcen freigegeben werden, indem der Aufruf durch die Kapselungshierarchie weitergeleitet wird. Wenn ein Objekt A z. B. ein Objekt B reserviert und Objekt B ein Objekt C, muss die Dispose-Implementierung von A Dispose für B aufrufen, und diese muss wiederum Dispose für C aufrufen. Objekte müssen außerdem die Dispose-Methode ihrer Basisklasse aufrufen, wenn die Basisklasse IDisposable implementiert.
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. Wenn eine Klasse mit einer derartigen Vereinbarung implementiert wird, kann auch eine öffentliche Methode mit einem benutzerdefinierten Namen (z. B. Schließen) implementiert werden, um die Dispose-Methode aufzurufen.
Da die Dispose-Methode explizit aufgerufen werden muss, müssen Objekte, die IDisposable implementieren, auch einen Finalizer implementieren, der die Freigabe der Ressourcen übernimmt, wenn Dispose nicht aufgerufen wird. In der Standardeinstellung ruft der Garbage Collector vor der Rückgabe des Speichers für ein Objekt dessen Finalizer auf. Nach dem Aufruf der Dispose-Methode ist es allerdings i. d. R. überflüssig, dass der Garbage Collector zusätzlich den Finalizer des freigegebenen Objekts aufruft. Implementierungen von Dispose können die GC..::.SuppressFinalize-Methode aufrufen, um die automatische Finalisierung zu verhindern.
Weitere Informationen zum Implementieren der Finalizer und der Dispose-Methode finden Sie in der GC-Klasse, in der Object..::.Finalize-Methode und unter Implementieren der Methoden "Finalize" und "Dispose" zum Bereinigen von nicht verwalteten Ressourcen.