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



我有一个带有此字段的类:

private WcfChannelFactory<IPrestoService> _channelFactory;

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

if (_channelFactory != null) { _channelFactory.Dispose(); }

但这会产生一个错误:

无法访问 IDisposable 的显式实现。释放

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

if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }

我不明白两件事:

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

  2. 如果我可以(应该?(简单地在_channelFactory上调用Close(),为什么XML文档没有说明Close()也会调用Dispose()?也许不会?这是令人困惑的。

  1. 由于 Dispose 方法是为 IDisposable 接口显式实现的,因此只有在具有类型为 IDisposable 的引用时才能看到该方法。该方法存在,但当您具有不同类型的引用时,您将看不到它。这类似于私有方法仅从类本身的代码中可见的方式,尽管它始终存在。

  2. Close 方法不会为此类调用Dispose。该方法不会关闭工厂,而是启动异步关闭过程。当 Close 方法退出时,关闭过程未完成,因此此时无法释放对象。

Dispose 方法被实现为接口IDisposable的显式成员。也就是说,定义如下所示:

public class WcfChannelFactory<T> : IDisposable
{
    public void IDisposable.Dispose()
    {
        ...
    }
}
教程

:显式接口实现教程

最新更新