在C#中隐式和显式实现接口有什么区别?
什么时候应该使用隐式?什么时候应该使用显式?
是否有任何利弊和/或缺点?
Microsoft的官方指南(来自第一版框架设计指南)声明不建议使用显式实现,因为它会给代码带来意外行为.
我认为这个指南在IoC之前的时候是非常有效的,当你没有作为接口传递时.
任何人都可以触及这方面吗?
我有一个这个领域的课:
private WcfChannelFactory<IPrestoService> _channelFactory;
Run Code Online (Sandbox Code Playgroud)
在这个Dispose()方法中,我这样做:
if (_channelFactory != null) { _channelFactory.Dispose(); }
Run Code Online (Sandbox Code Playgroud)
但这会产生错误:
无法访问IDisposable.Dispose的显式实现
经过一些研究后,似乎我可以这样处理:
if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
Run Code Online (Sandbox Code Playgroud)
我不明白两件事:
为什么不可Dispose()用?WcfChannelFactory<T>派生自ChannelFactory<T>,派生自ChannelFactory哪个实现IDisposable.然而ChannelFactory,没有Dispose()方法.这怎么可能?
如果我可以(应该?)简单地调用Close()上_channelFactory,为什么不XML文档状态Close()会也呼吁Dispose()?也许不会?这令人困惑.