本文介绍了IDispose对象可以没有可用的Dispose方法吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个项目中使用 FileHelpers 和类 MultiRecordEngine

I am using FileHelpers in one project, and the class MultiRecordEngine

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

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

This class implements IDisposable, BUT don't have a public Dispose method...

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

检查 GitHub上的此类代码我可以参见此处明确实现的方法,第913行:

Inspecting this class code on GitHub I can see the method implemented explicitly here, line 913:

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

所以... 为什么我不能调用该方法?这是有意的吗?如果是这样,这是一种好习惯吗?在什么情况下?

推荐答案

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

It's implemented explicitly, so you need to cast to IDisposable:

((IDisposable)eng).Dispose();

明确实现的成员只能通过接口访问,而不能通过实现类访问.

explicitly implemented members are only accessible through the interface, not the implementing class.

这篇关于IDispose对象可以没有可用的Dispose方法吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 22:33