Реализация IDisposable на подклассе, когда родитель также реализует IDisposable
У меня есть родительский и дочерний класс, которые оба должны реализоватьIDisposable
, Где долженvirtual
(а такжеbase.Dispose()
?) звонки вступают в игру? Когда я просто переопределитьDispose(bool disposing)
звонить, это очень странно, заявив, что я реализуюIDisposable
без явногоDispose()
функция (просто используя унаследованную), но имея все остальное.
Что я делал (тривиализировал совсем немного):
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);
}
}