Voici le code de MSDN. Je ne comprends pas pourquoi le travail n'est pas simplement fait dans la méthode régulière Dispose() ici. Quel est le but de la méthode Dispose (bool)? Qui appellerait Dispose (faux) ici?Fonction de Dispose appelant Disposer (IsDisposing) un motif 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;
}
}
Vous devriez toujours suivre ce modèle si vous encapsulant une ressource IDisposable dans un non étanche classe, cependant, de sorte que les sous-classes peuvent être traitées correctement (et de manière cohérente). –
Même si aucun finaliseur n'est requis. –
@Reed: La seule raison de faire cela lorsque les sous-classes sont impliquées est que * ils * peuvent avoir des finaliseurs - sinon pourquoi s'embêter avec un paramètre qui sera toujours vrai? –