我有一个这个领域的课:
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)
我不明白两件事:
为什么不可Dispose()用?WcfChannelFactory<T>派生自ChannelFactory<T>,派生自ChannelFactory哪个实现IDisposable.然而ChannelFactory,没有Dispose()方法.这怎么可能?
如果我可以(应该?)简单地调用Close()上_channelFactory,为什么不XML文档状态Close()会也呼吁Dispose()?也许不会?这令人困惑.
由于该Dispose方法是为IDisposable接口实现的,因此只有在获得类型的引用时才能看到该方法IDisposable.方法就在那里,但是当你有一个不同类型的引用时,你看不到它.它类似于一个私有方法是如何从类本身的代码唯一可见的,但它总是在那里.
该Close方法不会调用Dispose此类.该方法不关闭工厂,它启动异步关闭过程.当Close方法退出时,关闭过程没有完成,因此当时不能处理对象.