Implementando IDisposable en una subclase cuando el padre también implementa IDisposable
Tengo una clase para padres e hijos que ambos necesitan implementarIDisposable
. Donde deberiamosvirtual
(ybase.Dispose()
?) entran en juego las llamadas? Cuando acabo de anular elDispose(bool disposing)
llamada, se siente realmente extraño decir que implementoIDisposable
sin tener un explícitoDispose()
función (solo utilizando el heredado), pero teniendo todo lo demás.
Lo que había estado haciendo (trivializado bastante):
internal class FooBase : IDisposable
{
Socket baseSocket;
private void SendNormalShutdown() { }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
SendNormalShutdown();
}
baseSocket.Close();
}
}
~FooBase()
{
Dispose(false);
}
}
internal class Foo : FooBase, IDisposable
{
Socket extraSocket;
private bool _disposed = false;
protected override void Dispose(bool disposing)
{
if (!_disposed)
{
extraSocket.Close();
}
base.Dispose(disposing);
}
~Foo()
{
Dispose(false);
}
}