微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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方法退出时,关闭过程没有完成,因此此时无法处理对象.

原文地址:https://www.jb51.cc/csharp/92261.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐