Aquí está el código de MSDN. No entiendo por qué el trabajo no se realiza solo en el método Dispose() habitual aquí. ¿Cuál es el propósito de tener el método Dispose (bool)? ¿Quién llamaría a Dispose (false) aquí?Propósito del patrón Dispose calling Dispose (IsDisposing) en 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;
}
}
Aún debe seguir este patrón si está encapsulando un recurso en un IDisposable no sellada clase, por lo tanto, las subclases se pueden manejar de manera adecuada (y consistente). –
Incluso si no se necesita un finalizador. –
@Reed: la única razón para hacer esto cuando las subclases están involucradas es para que * they * puedan tener finalizadores; de lo contrario, ¿por qué molestarse con un parámetro que siempre será cierto? –