Aus dem gleichen Artikel: "Es gibt sehr wenige gute Anwendungen von Auferstehung, und Sie sollten es wirklich vermeiden, wenn möglich."
Die beste Anwendung, die ich mir vorstellen kann, ist ein "Recycling" -Muster. Betrachten Sie eine Fabrik, die teure, praktisch unveränderliche Objekte produziert; zum Beispiel, Objekte, die durch Parsen einer Datendatei instanziiert werden, oder durch Reflektieren einer Assembly oder durch tiefes Kopieren eines "Master" -Objektgraphen. Die Ergebnisse werden sich wahrscheinlich nicht jedes Mal ändern, wenn Sie diesen teuren Prozess durchführen. Es ist in Ihrem Interesse, die Instanziierung von Grund auf zu vermeiden. Aus bestimmten Designgründen muss das System jedoch in der Lage sein, viele Instanzen (keine Singletons) zu erstellen, und Ihre Kunden können nichts über die Factory wissen, sodass sie das Objekt selbst "zurückgeben" können. Sie können das Objekt injizieren lassen oder einen Factory-Methoden-Delegaten erhalten, von dem sie eine Referenz erhalten. Wenn die abhängige Klasse den Gültigkeitsbereich verlässt, würde dies normalerweise auch für die Instanz gelten.
Eine mögliche Antwort besteht darin, Finalize() zu überschreiben, einen Teil des veränderlichen Zustands der Instanz zu bereinigen und dann, solange sich die Factory im Bereich befindet, die Instanz erneut an ein Mitglied der Factory anzuhängen. Dies ermöglicht, dass der Müllsammlungsprozess den wertvollen Teil dieser Objekte tatsächlich "recycelt", wenn sie sonst außer Reichweite und vollständig zerstört würden. Die Fabrik kann nachsehen und sehen, ob sie recycelte Objekte in ihrer "Tonne" zur Verfügung hat, und wenn ja, kann sie sie aufpolieren und verteilen. Die Fabrik müsste nur dann eine neue Kopie des Objekts instanziieren, wenn die Anzahl der von dem Prozess verwendeten Gesamtobjekte zunimmt.
Andere mögliche Anwendungen können eine hochspezialisierte Logger- oder Audit-Implementierung sein, bei der Objekte, die nach ihrem Tod verarbeitet werden sollen, an eine Arbeitswarteschlange angehängt werden, die von diesem Prozess verwaltet wird. Nachdem der Prozess sie behandelt hat, können sie vollständig zerstört werden.
Im Allgemeinen, wenn Sie wollen, dass Angehörige denken, dass sie ein Objekt loswerden, oder sich nicht kümmern müssen, aber Sie die Instanz behalten wollen, kann Auferstehung ein gutes Werkzeug sein, aber Sie müssen Beobachte SEHR sorgfältig, um Situationen zu vermeiden, in denen Objekte, die wiederbelebte Referenzen erhalten, zu "Pack-Ratten" werden und jede Instanz, die jemals erstellt wurde, für die gesamte Lebensdauer des Prozesses behalten.
Wenn ein Entwickler, der für mich arbeitet, diesen Code geschrieben hat, würde ich ihn herausreißen lassen. –
@John: Ich stimme völlig zu - es ist wirklich etwas da für extreme Randfälle, IMO. –
@John: Ich verstehe es klar und mein Interesse ist nur wissenschaftlich :) – Vokinneberg