一个IDispose对象可以不具有可用的Dispose方法

我使用的一个项目FileHelpers,类MultiRecordEngine

public sealed class MultiRecordEngine
    : EventEngineBase<object>, IEnumerable, IDisposable

此类实现IDisposable ,但没有公共的Dispose方法...

MultiRecordEngine eng = null;
eng.Dispose(); // <---- Results in compilation error

在GitHub上检查这个类的代码,我可以在这里看到第913行显式实现的方法:

void IDisposable.Dispose()
{
    Close();
    GC.SuppressFinalize(this);
}

所以... 为什么我不能调用这个方法? 这是否打算,如果是这样,这是一个好习惯,在什么情况下?


它是明确实现的,所以你需要转换为IDisposable

((IDisposable)eng).Dispose();

显式实现的成员只能通过接口访问,而不能通过实现类访问。


首先,您可以通过转换为IDisposable来调用该方法:

((IDisposable)eng).Dispose();

您也可以在使用块中正确使用该类:

using (MultiRecordEngine eng = new MultiRecordEngine())
{
..
}
链接地址: http://www.djcxy.com/p/54517.html

上一篇: Can an IDispose objects not have an available Dispose method

下一篇: Should I dispose the IDisposable given to me?