Oto kod z MSDN. Nie rozumiem, dlaczego praca nie jest po prostu zrobiona w zwykłej metodzie Dispose() tutaj. Jaki jest cel posiadania metody Dispose (bool)? Kto mógłby kiedykolwiek nazwać Dispose (false) tutaj?Cel usuwania wywołań Usuwanie (IsDisposing) wzorca w języku C#?
public void Dispose()
{
Dispose(true);
// Use SupressFinalize in case a subclass
// of this type implements a finalizer.
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
// If you need thread safety, use a lock around these
// operations, as well as in your methods that use the resource.
if (!_disposed)
{
if (disposing) {
if (_resource != null)
_resource.Dispose();
Console.WriteLine("Object disposed.");
}
// Indicate that the instance has been disposed.
_resource = null;
_disposed = true;
}
}
Należy nadal podążać ten wzór jeśli enkapsulacji zasobu IDisposable w nie-uszczelnione klasa, więc podklasy mogą być obsługiwane poprawnie (i konsekwentnie). –
Nawet jeśli nie jest potrzebny żaden finalizator. –
@Reed: Jedynym powodem, aby to zrobić, gdy są zaangażowane podklasy jest to, że * oni * mogą mieć finalizatory - w przeciwnym razie po co zawracać sobie głowę parametrem, który zawsze będzie prawdziwy? –