IDispose对象可以没有可用的Dispose方法

时间:2013-08-20 14:59:57

标签: c# idisposable filehelpers

我在一个项目中使用FileHelpers,在课程MultiRecordEngine

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

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

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

检查this class code on GitHub我可以看到这里明确实现的方法,第913行:

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

所以... 为什么我不能调用该方法?这是有意的,如果是的话,这是一个好的做法,在什么情况下?

2 个答案:

答案 0 :(得分:5)

它是明确实现的,因此您需要转换为IDisposable

((IDisposable)eng).Dispose();

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

答案 1 :(得分:1)

首先,您可以通过强制转换为IDisposable

来调用该方法
((IDisposable)eng).Dispose();

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

using (MultiRecordEngine eng = new MultiRecordEngine())
{
..
}