为什么Dispose()方法在我的IDisposable对象上不可用?
我有这个领域类:为什么Dispose()方法在我的IDisposable对象上不可用?
private WcfChannelFactory<IPrestoService> _channelFactory;
在Dispose()
方法,我这样做:
if (_channelFactory != null) { _channelFactory.Dispose(); }
但是,这会产生一个错误:
Cannot access explicit implementation of IDisposable.Dispose
后做一些research,看来我可以这样配置:
if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
我不明白两两件事:
为什么不是
Dispose()
可用?WcfChannelFactory<T>
派生自ChannelFactory<T>
,其源自ChannelFactory
,其实现IDisposable
。然而ChannelFactory
没有Dispose()
方法。这怎么可能?如果我可以(应该?)简单地调用
_channelFactory
Close()
,为什么不XML文档状态Close()
会也呼吁Dispose()
?也许它不会?这很混乱。
作为
Dispose
方法被实现explicilty为IDisposable
接口,你只能看到该方法时,你有类型IDisposable
的参考。方法就在那里,但是当你有一个不同类型的引用时你看不到它。它类似于私有方法只能从类本身的代码中看到,尽管它始终存在。Close
方法不会为此类调用Dispose
。该方法不会关闭工厂,它会启动异步关闭进程。当Close
方法退出时,关闭过程未完成,因此此时不能处理该对象。
的Dispose
方法实现为接口IDisposable
的显式成员。也就是说,该定义看起来是这样的:
public class WcfChannelFactory<T> : IDisposable
{
public void IDisposable.Dispose()
{
...
}
}
我知道明确的接口实现是什么。谢谢! – 2013-05-08 01:55:41
所以我怎么处置_channelFactory'的'?我应该调用'Close()'吗?我应该叫'Dispose()'? – 2013-05-08 01:52:54
@鲍勃,没关系。误解你原来的问题。看起来你正在实现你自己的一次性模式。 – 2013-05-08 01:53:39
@AnthonyPegram我不能。该方法返回'_channelFactory'。消费者正在使用'使用'来封装这个调用,所以我们的课程需要实现'IDiposable'并添加它。 – 2013-05-08 01:55:11