我有一个父类和子类,它们都需要实现IDisposable
。 virtual
(和base.Dispose()
?)呼叫应该在哪里起作用?当我刚刚重写Dispose(bool disposing)
调用时,感觉真的很奇怪,说我实现了IDisposable
而没有明确的Dispose()
函数(只是使用继承的函数),但具有其他所有内容。在父类还实现IDisposable时在子类上实现IDisposable
我一直在做(小瞧了不少)什么:
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);
}
}
[:资源下载](https://msdn.microsoft.com/en-us/library/system.idisposable(V = vs.110).aspx0)具有关于如何实施子类对象的IDisposable建议。 – PeterM 2016-08-18 13:52:58