Ich arbeite an einem .NET-Projekt, das mit einigen benutzerdefinierten Klassen interagieren muss - bezeichnet als "Jobs". Alle Jobklassen müssen eine spezifische Schnittstelle IJob
in der Reihenfolge implementieren, in der die Bibliothek sie verwendet. Manchmal enthält eine Jobklasse möglicherweise nicht verwaltete Ressourcen, die explizit entsorgt werden müssen.Wie soll ich die Entsorgung von möglicherweise wegwerfbaren Objekten sicherstellen?
Wie soll ich sicherstellen, dass alle Arbeitsplätze nach Gebrauch entsorgt werden, wenn ich nicht im Voraus wissen, ob der Job explizit Entsorgung muss? Ich habe ein paar Ideen selbst, aber möchten Sie Ihre Kommentare/Anregungen hören:
IJob : IDisposable
Stellen und zwingt alle Jobs eineDispose()
Methode zu implementieren. Dies ermöglicht es mir, mit Arbeitsplätzen inusing
Blöcken zu arbeiten, aber da die meisten Arbeitsplätze sind nicht explizite Verfügung benötigen erwartet, könnte dies für den Client-Entwickler unnötige Verwirrung.alle Arbeit tun Arbeitsplätze in
try-finally
Blöcken beteiligt undfinally
verwenden, um sicherzustellen, dassDispose()
, wenn der JobIDisposable
implementiert genannt wird. Dies erleichtert es den Clients, eine neue Job-Klasse zu implementieren - indem sie keine leereDispose()
-Methode implementieren muss -, sondern verbirgt auch die Tatsache, dass die Bibliothek verfügbare Jobs kennt und sich um sie kümmert.
Danach Schreiben auf, neige ich dazu, in Richtung Lösung # 1 zu lehnen, aber ich denke immer noch, es wäre schön, alternative Lösungen zu sehen, und zusätzliche Vor/Nachteile zu den beiden habe ich bereits im Kopf.
Guter Punkt. Die meisten Streams müssen jedoch entsorgt werden, und ich erwarte, dass nur eine Minderheit von Arbeitsplätzen diese benötigt. –
Es kommt mir vor, dass 'System.Web.IHttpModule' auch seine Implementierer benötigt, um eine' Dispose() 'Methode zur Verfügung zu stellen, obwohl nur ein paar Module (IMHO) es brauchen. Ich denke, das bietet zusätzliche Priorität für # 1. –
+1, ich denke außerdem, es macht Sinn, eine standardisierte Methode für einen Job zur Verfügung zu stellen, um aufzuräumen, was es verwendet. Durch den Einsatz von IDisposable profitieren Sie von der Framework-Unterstützung, und die Endnutzer profitieren davon, dass sie zumindest darüber nachdenken müssen, wo sie den richtigen Bereinigungscode platzieren können. – user7116