在C#中隐式和显式实现接口有什么区别?
什么时候应该使用隐式?什么时候应该使用显式?
是否有任何利弊和/或缺点?
Microsoft的官方指南(来自第一版框架设计指南)声明不建议使用显式实现,因为它会给代码带来意外行为.
我认为这个指南在IoC之前的时候是非常有效的,当你没有作为接口传递时.
任何人都可以触及这方面吗?
我在一个项目和类中使用FileHelpersMultiRecordEngine
public sealed class MultiRecordEngine
: EventEngineBase<object>, IEnumerable, IDisposable
Run Code Online (Sandbox Code Playgroud)
这个类实现了IDisposable,但是没有公共的Dispose方法......
MultiRecordEngine eng = null;
eng.Dispose(); // <---- Results in compilation error
Run Code Online (Sandbox Code Playgroud)
在GitHub上检查这个类代码我可以看到这里明确实现的方法,第913行:
void IDisposable.Dispose()
{
Close();
GC.SuppressFinalize(this);
}
Run Code Online (Sandbox Code Playgroud)
那么...... 为什么我不能调用这个方法呢?这是有意的,如果是这样,这是一个好的做法,在什么情况下?