Mam kilka podstawowych pytań dotyczących deseniu usuwania w języku C#.Szczegółowe pytania dotyczące deseniu C# Dispose
W poniższym fragmencie kodu, który wydaje się być standardowym sposobem implementacji wzorca rozporządzania, można zauważyć, że zarządzane zasoby nie są obsługiwane, jeśli dysponowanie jest fałszywe. Jak/kiedy są obsługiwane? Czy GC przyjdzie i zajmie się zarządzanymi zasobami później? Ale jeśli tak jest, co robi wywołanie GG.SuppressFinalize (this)? Czy ktoś może podać mi przykład dysponowania zarządzanymi zasobami? Przypominają się zdarzenia związane z odhaczeniem. Coś jeszcze? Sposób, w jaki wzór jest napisany, wydaje się, że zostaną one usunięte (później), jeśli nic nie zrobisz w sekcji "Jeśli (utylizacja)". Komentarze?
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);
}
Czy to prawda, co czytałem o zamki w Dispose (bool) w tym wątku, How do I implement the dispose pattern in c# when wrapping an Interop COM Object?? Mówi: "Meta-meta komentarz - a także, że ważne jest, aby nigdy nie nabywać zamków ani nie używać blokady podczas nieuporządkowanego czyszczenia." Dlaczego tak jest? Czy dotyczy to również zasobów niezarządzanych?
Wreszcie, czy kiedykolwiek zaimplementujesz finalizator (~ MyClass() w C#) bez implementacji IDisposable? Sądzę, że czytałem gdzieś, że finalizatory i IDisposable nie są konieczne (lub pożądane), jeśli nie ma żadnych niezarządzanych zasobów. Jednak widzę zastosowanie finalizatora bez IDisposable w niektórych przykładach (patrz: http://www.codeproject.com/KB/cs/idisposable.aspx jako przykład) Dzięki, Dave
Dzięki za wszystkie świetne odpowiedzi wszystkim! Mogę tylko oznaczyć odpowiedź jako niestety. – Dave