Questo è il codice MSDN. Non capisco perché il lavoro non sia fatto solo nel regolare metodo Dispose() qui. Qual è lo scopo di avere il metodo Dispose (bool)? Chi chiamerebbe mai Dispose (falso) qui?Scopo di Dispose calling Dispose (IsDisposing) pattern in 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;
}
}
Si dovrebbe comunque seguire questo modello, se stai incapsulare una risorsa IDisposable in un non-sigillato classe, però, così le sottoclassi possono essere gestite correttamente (e coerentemente). –
Anche se non è necessario alcun finalizzatore. –
@Reed: l'unica ragione per farlo quando sono coinvolte sottoclassi è che * esse * possono avere finalizzatori - altrimenti perché preoccuparsi di un parametro che sarà sempre vero? –