在C#中隐式实现和显式实现接口(interface)有什么区别?

什么时候应该使用隐式,什么时候应该使用显式?

彼此之间是否有优点和/或缺点?

Microsoft的官方指南(来自第一版Framework Design Guidelines)指出,不建议使用显式实现的 ,因为它会使代码产生意外的行为。

我认为此指南在iot之前的中非常有效,当您不将事物作为接口(interface)传递时。

任何人都可以谈谈这方面吗?

最佳答案

隐式是当您通过类(class)成员定义界面时。 显式是在接口(interface)上的类中定义方法时。我知道这听起来令人困惑,但这就是我的意思:IList.CopyTo将隐式实现为:

public void CopyTo(Array array, int index)
{
    throw new NotImplementedException();
}

并明确表示为:
void ICollection.CopyTo(Array array, int index)
{
    throw new NotImplementedException();
}

区别在于,隐式实现允许您通过将接口(interface)强制转换为该类以及接口(interface)本身而通过创建的类访问接口(interface)。显式实现允许您仅通过将其强制转换为接口(interface)本身来访问该接口(interface)。
MyClass myClass = new MyClass(); // Declared as concrete class
myclass.CopyTo //invalid with explicit
((IList)myClass).CopyTo //valid with explicit.

我主要使用显式的来保持实现的整洁,或者在我需要两种实现时。无论如何,我很少使用它。

我确信还有更多理由使用/不使用其他人会张贴的明确内容。

有关每个线程背后的出色推理,请参见此线程中的next post

07-26 06:11