8

我有这个领域的课程:

private WcfChannelFactory<IPrestoService> _channelFactory;

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

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

但这会产生错误:

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

在做了一些研究之后,看来我可以这样处理:

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

我不明白两件事:

  1. 为什么不可Dispose()用?WcfChannelFactory<T>派生自ChannelFactory<T>,派生自ChannelFactory,实现IDisposable。却ChannelFactory没有Dispose()办法。这怎么可能?

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

4

2 回答 2

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

  2. Close方法不会调用Dispose此类。该方法不会关闭工厂,它会启动异步关闭过程。当Close方法退出时,关闭过程还没有结束,所以此时对象不能被释放。

于 2013-05-08T01:48:36.713 回答
2

Dispose方法被实现为接口的显式成员IDisposable。也就是说,定义看起来像这样:

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

教程:显式接口实现教程

于 2013-05-08T01:51:57.133 回答