Immer wenn Sie eine Ressource haben, die deterministische Säuberung benötigt, d. H. Sie möchten, dass sie eine Chance hat, "zerstört" zu werden, sobald Sie damit fertig sind.
Genauer gesagt versucht die IDisposible-Schnittstelle hauptsächlich, das Fehlen eines Schlüsselwortes "löschen" in .net-Sprachen zu lösen. Da die CLR Garbage Collected ist, wissen Sie nie, wann der Finalizer (Destruktor) für ein Objekt ausgeführt wird. Es steht dem GC frei, so lange zu warten, wie es Ihnen gefällt, bevor er die verwaltete Ressource freigibt.
Viele verwaltete Ressourcen wickeln jedoch die zugrunde liegenden endlichen Ressourcen ein - Speicher ist nicht das einzige, was zugewiesen und freigegeben werden muss. Wie erwähnt, sind Dateigriffe eins; Datenbank behandelt eine andere - es gibt unzählige Beispiele. Um ein inkonsistentes Durcheinander von Aufräum-Idiomen zu vermeiden, wird das IDisposible-Muster verwendet, um zu sagen: "Bitte geben Sie Ihre endlichen Ressourcen frei, ich bin fertig mit ihnen". Da es in das Framework integriert ist, erhält es spezielle Sprachunterstützung über "using", um sicherzustellen, dass Sie nie vergessen, die Dispose-Methoden aufzurufen und somit die nicht verwaltete Ressource "auslaufen lassen".
Dies bedeutet nicht, all IDisposible Implementierer in einem mit eingewickelt werden soll - wenn Sie eine Referenz sind zu halten, und müssen sie in der Zukunft sollten Sie auf jeden Fall sie nicht wickeln, wie Sie eine vorzeitige Freigabe verursachen würden die zugrunde liegende Ressource. Rufen Sie Dispose nur auf, wenn Sie mit dem Objekt fertig sind, und schließen Sie das "Verwenden" nur dann ein, wenn Sie wissen, dass Sie damit fertig sind, nachdem das Anwendungsfenster beendet wurde.
So wie wir erwarten, brauchen Sprachen, die deterministische Zerstörung haben, wie C++/CLI, nicht "verwenden". Nicht-Heap-C++/CLI-Objekte werden mit ihrer Dispose-Methode automatisch aufgerufen, wenn sie außerhalb des Bereichs liegen und das Destruktorverhalten nachahmen, das das Muster zu erfassen versucht.
würde der down voter bitte einen Kommentar hinterlassen. Danke –
2 downvotes und keine Kommentare. was gibt? –
Angenommen, IDisposable ist eine lokale Variable. Wenn es sich um ein Klassenmitglied handelt, sollten Sie IDisposable selbst implementieren, um diese Objekte zu bereinigen. –