Ich habe ein paar grundlegende Fragen zum Dispose Pattern in C#.Spezifische Fragen zu C# Dispose Pattern
Im folgenden Codefragment, das eine Standardmethode zum Implementieren des Dispose-Musters zu sein scheint, werden Sie feststellen, dass verwaltete Ressourcen nicht behandelt werden, wenn disposing false ist. Wie/wann werden sie behandelt? Kommt der GC mit und verwaltet später die verwalteten Ressourcen? Aber wenn das der Fall ist, was macht der Aufruf GG.SuppressFinalize (this)? Kann mir jemand ein Beispiel für die Entsorgung verwalteter Ressourcen nennen? Unhooking-Ereignisse kommen mir in den Sinn. Noch etwas? Die Art und Weise, wie das Muster geschrieben wird, scheint so, als würden sie (später) entsorgt werden, wenn Sie nichts im Abschnitt "if (disposing)" getan haben. Bemerkungen?
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
// There are no unmanaged resources to release, but
// if we add them, they need to be released here.
}
disposed = true;
// If it is available, make the call to the
// base class's Dispose(Boolean) method
base.Dispose(disposing);
}
// implements IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
Ist es wahr, was ich über Schleusen in Dispose (bool) in diesem Thread gelesen, How do I implement the dispose pattern in c# when wrapping an Interop COM Object?? Es sagt, "Meta-Meta-Kommentar - sowie das, es ist wichtig, dass Sie nie Sperren erwerben oder sperren während Ihrer nicht verwalteten Bereinigung." Warum ist das? Gilt es auch für nicht verwaltete Ressourcen?
Schließlich implementiert jemals einen Finalizer (~ MyClass() in C#), ohne IDisposable zu implementieren? Ich glaube, ich habe irgendwo gelesen, dass Finalizer und IDisposable nicht notwendig (oder wünschenswert) sind, wenn es keine nicht verwalteten Ressourcen gibt. Ich habe jedoch die Verwendung eines Finalizerthread ohne IDisposable in einigen Beispielen sehen (siehe: http://www.codeproject.com/KB/cs/idisposable.aspx als ein Beispiel) Danke, Dave
Danke für all die tollen Antworten jeder! Ich kann leider nur eine als Antwort markieren. – Dave