C#接口 隐式实现与显式实现

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

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

一个或另一个有什么利弊?

Microsoft的官方指南(从第一版Framework Design Guidelines)指出,不推荐使用显式实现,因为它给出代码意外的行为。

我认为这个指南在IoC前的时间非常有效,当你不作为接口传递东西。

任何人都可以触及这方面吗?

隐式是当你通过类上的成员定义你的接口。显式是在界面上定义类中的方法。我知道这听起来很困惑,但这里是我的意思:IList.CopyTo将被隐式实现为:

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

并明确地表示为:

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

不同之处在于,当它被转换为该类时,以及当它被转换为接口时,通过你创建的类可以隐式地访问它。显式实现允许它只能在作为接口本身进行转换时访问。

MyClass myClass = new MyClass(); // Declared as concrete class
myclass.CopyTo //invalid with explicit
((IList)myClass).CopyTo //valid with explicit.

我使用显式主要是保持实现清洁,或当我需要两个实现。但无论我很少使用它。

我相信有更多的理由使用它/不使用,其他人会发布。

看到next post在这个线程中的每个后面的优秀推理。

翻译自:https://stackoverflow.com/questions/143405/c-sharp-interfaces-implicit-implementation-versus-explicit-implementation

转载注明原文:C#接口 隐式实现与显式实现