Während alle (nicht verwalteten) Ressourcen erwähnt haben, muss ich noch etwas hinzufügen: Ich benutze es, wenn ich Event-Handler-Hookups eliminieren muss, die sonst verhindern würden, dass eine Klasse den Bereich verlässt und Garbage Collected wird.
Als Beispiel habe ich einen Dienst, der in eine untergeordnete Ansicht injiziert wird, die untergeordnete Ansicht wird verschiedene asynchrone beendete Typ Ereignisse auf dem Dienst abonnieren. Der Besitzer dieser Kindansicht hat keine Ahnung, was der konkrete Typ ist, er hat es einfach als Schnittstelle. Der Dienst kann zu irgendeinem willkürlichen Zeitpunkt in der Zukunft aus dem Rahmen fallen, und ich möchte nicht, dass er herumhängt, weil er nicht gecallt wird. Nach dem Entfernen dieser untergeordneten Ansicht wird der Besitzer Dispose aufrufen, um ihm die Möglichkeit zu geben, Event-Handler auszuhängen. Hier ist ein leicht erfundener (und sehr Pseudocode) Beispiel, beachten Sie, wie die Schnittstelle für die Kindansicht auch IDisposable
implementiert.
public class OwnerView {
public OwnerView() {
_childView = new ChildView(myServiceReference);
}
public void CloseChildView() {
if (childView != null) {
_childView.Close();
_childView.Dispose();
}
_childView = null;
}
private IChildView _childView;
}
public class ChildView : IChildView {
public ChildView(MyService serviceRef) {
_serviceRef = serviceRef;
_serviceRef.GetSettingsAsyncFinished += new EventHandler(someEventHandler);
}
public void IDisposable.Dispose() {
_serviceRef -= someEventHandler;
}
private MyService _serviceRef;
}
public interface IChildView : IDisposable {
void DoSomething();
... etc ...
}
Es gibt weit mehr Autorität Kommentare über diese von den anderen auf SO, wie Do event handlers stop garbage collection from occuring? und Garbage collection when using anonymous delegates for event handling. Sie können auch diesen Artikel codeproject Artikel überprüfen.
@Earwicker: Wenn Sie mehr als ich zu diesem Thema gefunden haben, dann würde ich es begrüßen, dass Sie es mit mir teilen. – Bobby
http://stackoverflow.com/search?q=IDisposable+eigentümer –