场景:
应用程序实例化实现的类的单个实例IDisposable.该实例通过静态成员公开,使其可供应用程序的所有部分访问.单个实例需要在应用程序的生命周期内保持活动状态.
题
Dispose在应用程序关闭并且进程终止之前调用该方法有多重要?
我一直认为,在大多数这种情况下,没有必要打电话,Dispose因为过程的终止自然会清理资源.我错了吗?
我可以想到一些解决这个问题的方法,但是我觉得应该有一个比我已经提出的更优雅的解决方案.
对象在被处置之前清除其所有事件处理程序的最合适方式是什么.遗憾的是事件处理程序无法枚举.
理论上,对于将处理程序添加到对象以记住删除它的代码,假设对象在超出范围之前将自行清理,是否更为正确?
当我的类包含套接字和事件时,如何实现Dispose模式?
它应该是这样的吗?
class MyClass
{
Socket m_ListenerSocket = new Socket();
book m_Disposed=false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool isDisposing)
{
if (!m_Disposed)
{
if (isDisposing)
{
if (m_ListenerSocket != null)
{
m_ListenerSocket.Dispose();
innerClass.Notify -= Notify;
}
}
//finalized unmanged code here
m_Disposed = true;
}
}
~MyClass()
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑...套接字类是"托管代码c#版本的winSock"?因此,如果用户名为dispose("isDisposing IS为true"),它应该被释放,那么事件处理程序呢?
所以在最终评论部分应该只释放Inptr对象?谢谢.