我有一个带有此字段的类:
private WcfChannelFactory<IPrestoService> _channelFactory;
在Dispose()
方法中,我正在这样做:
if (_channelFactory != null) { _channelFactory.Dispose(); }
但这会产生一个错误:
无法访问 IDisposable 的显式实现。释放
经过一些研究,我似乎可以这样处理:
if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
我不明白两件事:
为什么
Dispose()
不可用?WcfChannelFactory<T>
派生自ChannelFactory<T>
, 派生自实现IDisposable
的ChannelFactory
。然而,ChannelFactory
没有Dispose()
的方法。这怎么可能?如果我可以(应该?(简单地在
_channelFactory
上调用Close()
,为什么XML文档没有说明Close()
也会调用Dispose()
?也许不会?这是令人困惑的。
-
由于
Dispose
方法是为IDisposable
接口显式实现的,因此只有在具有类型为IDisposable
的引用时才能看到该方法。该方法存在,但当您具有不同类型的引用时,您将看不到它。这类似于私有方法仅从类本身的代码中可见的方式,尽管它始终存在。 -
Close
方法不会为此类调用Dispose
。该方法不会关闭工厂,而是启动异步关闭过程。当Close
方法退出时,关闭过程未完成,因此此时无法释放对象。
Dispose
方法被实现为接口IDisposable
的显式成员。也就是说,定义如下所示:
public class WcfChannelFactory<T> : IDisposable
{
public void IDisposable.Dispose()
{
...
}
}
教程:显式接口实现教程