2

我在一个项目中使用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);
}

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

4

2 回答 2

5

它是显式实现的,因此您需要转换为IDisposable

((IDisposable)eng).Dispose();

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

于 2013-08-20T15:02:04.360 回答
1

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

((IDisposable)eng).Dispose();

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

using (MultiRecordEngine eng = new MultiRecordEngine())
{
..
}
于 2013-08-20T15:07:02.820 回答