C# · 12月 25, 2021

c# – 为什么我的IDisposable对象上的Dispose()方法不可用?

我有一个这个领域的课: 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>,它源自实现IDisposable的ChannelFactory.然而ChannelFactory没有Dispose()方法.这怎么可能?
>如果我可以(应该?)只是在_channelFactory上调用Close(),为什么XML文档没有声明Close()也会调用Dispose()?也许不会?这令人困惑.

解决方法 >由于Dispose方法对IDisposable接口实现了明确性,因此只有在引用IDisposable类型时才能看到该方法.方法就在那里,但是当你有一个不同类型的引用时,你看不到它.它类似于私有方法只能从类本身的代码中看到,尽管它始终存在. > Close方法不会为此类调用Dispose.该方法不关闭工厂,它启动异步关闭过程.当Close方法退出时,关闭过程没有完成,因此此时无法处理对象.