【发布时间】:2011-01-30 13:53:14
【问题描述】:
我有一个父类和子类都需要实现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);
}
}
【问题讨论】:
-
Msdn 提供了有关如何对实现 IDisposable 的对象进行子类化的建议。
标签: c# .net inheritance idisposable