为什么我的IDisposable对象上的Dispose()方法不可用?

Bob*_*orn 7 c# dispose

我有一个这个领域的课:

private WcfChannelFactory<IPrestoService> _channelFactory;
Run Code Online (Sandbox Code Playgroud)

在这个Dispose()方法中,我这样做:

if (_channelFactory != null) { _channelFactory.Dispose(); }
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:

无法访问IDisposable.Dispose的显式实现

经过一些研究后,似乎我可以这样处理:

if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
Run Code Online (Sandbox Code Playgroud)

我不明白两件事:

  1. 为什么不可Dispose()用?WcfChannelFactory<T>派生自ChannelFactory<T>,派生自ChannelFactory哪个实现IDisposable.然而ChannelFactory,没有Dispose()方法.这怎么可能?

  2. 如果我可以(应该?)简单地调用Close()_channelFactory,为什么不XML文档状态Close()会也呼吁Dispose()?也许不会?这令人困惑.

Guf*_*ffa 7

  1. 由于该Dispose方法是为IDisposable接口实现的,因此只有在获得类型的引用时才能看到该方法IDisposable.方法就在那里,但是当你有一个不同类型的引用时,你看不到它.它类似于一个私有方法是如何从类本身的代码唯一可见的,但它总是在那里.

  2. Close方法不会调用Dispose此类.该方法不关闭工厂,它启动异步关闭过程.当Close方法退出时,关闭过程没有完成,因此当时不能处理对象.