我在一个项目中使用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);
}
所以... 为什么我不能调用该方法?这是有意的,如果是的话,这是一个好的做法,在什么情况下?
答案 0 :(得分:5)
它是明确实现的,因此您需要转换为IDisposable
:
((IDisposable)eng).Dispose();
显式实现的成员只能通过接口访问,而不能通过实现类访问。
答案 1 :(得分:1)
首先,您可以通过强制转换为IDisposable
:
((IDisposable)eng).Dispose();
您还可以在使用块中正确使用该类:
using (MultiRecordEngine eng = new MultiRecordEngine())
{
..
}