我在一个使用C# .NET 4.0的大型项目上工作。有一个自定义类继承自System.Net.Sockets.SocketAsyncEventArgs类。大致如下:
public class SocketTaskArgs : SocketAsyncEventArgs
{
public SocketTaskArgs()
{
Completed += someEventhHandler;
}
public void CleanUp()
{
Completed -= someEventhHandler;
}
/*
There is a lot of code here that is unimportant at the moment.
*/
}
所以,我想把CleanUp()方法的内容移动到Dispose(bool)方法中。
首先,我检查了基类SocketAsyncEventArgs的源代码(使用转到定义,以便我看到元数据作为源代码)。我发现,这个类实现了IDisposable接口。很好,我只需要重写Dispose(bool)方法,对吧?(请参见MSDN上的IDisposable接口,“IDisposable和继承层次结构”部分,获取更多详细信息)。对我来说没有什么新东西...不幸的是,SocketAsyncEventArgs类的实现如下:
public class SocketAsyncEventArgs : EventArgs, IDisposable
{
public void Dispose();
//some other stuff here
}
这意味着,无法覆盖 Dispose(bool) 方法,因为它是作为 private 实现的而不是 protected... 这是什么原因?
接下来,我在 MSDN 上了解了 SocketAsyncEventArgs.Dispose() 方法。有趣的是,它包含以下部分:
“继承者说明”
“Dispose 可以被其他对象多次调用。当重写 Dispose(Boolean) 时,请注意不要引用先前在早期调用 Dispose 中已处理的对象。有关如何实现 Dispose(Boolean) 的详细信息,请参阅实现 Dispose 方法。”
等等...什么?
“当重写 Dispose(Boolean) 时,...”
我该如何重写 Dispose(Boolean)?
在这种情况下,实现IDisposable接口的推荐方式是什么?
Dispose
是公开的,只是不是virtual
。 - D Stanley