可能重复:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementation
您好
任何人都可以解释一下隐式和显式接口之间的区别吗?
谢谢!
答案 0 :(得分:9)
当您实现接口explicitlty时,只有在将对象作为接口引用时,该接口上的方法才可见:
public interface IFoo
{
void Bar();
}
public interface IWhatever
{
void Method();
}
public class MyClass : IFoo, IWhatever
{
public void IFoo.Bar() //Explicit implementation
{
}
public void Method() //standard implementation
{
}
}
如果您的代码中的某个位置引用了此对象:
MyClass mc = new MyClass();
mc.Bar(); //will not compile
IFoo mc = new MyClass();
mc.Bar(); //will compile
对于标准实现,引用对象的方式无关紧要:
MyClass mc = new MyClass();
mc.Method(); //compiles just fine
答案 1 :(得分:3)
隐式接口实现是指具有相同签名的接口的方法。
显式接口实现是您显式声明方法所属的接口的地方。
interface I1
{
void implicitExample();
}
interface I2
{
void explicitExample();
}
class C : I1, I2
{
void implicitExample()
{
Console.WriteLine("I1.implicitExample()");
}
void I2.explicitExample()
{
Console.WriteLine("I2.explicitExample()");
}
}
答案 2 :(得分:2)
Explicit仅表示您指定接口,隐含表示您不指定接口。
例如:
interface A
{
void A();
}
interface B
{
void A();
}
class Imp : A
{
public void A() // Implicit interface implementation
{
}
}
class Imp2 : A, B
{
public void A.A() // Explicit interface implementation
{
}
public void B.A() // Explicit interface implementation
{
}
}
答案 3 :(得分:1)
另外,如果您想知道为什么存在显式实现,那是因为您可以从多个接口实现相同的方法(名称和签名);那么如果你需要不同的功能,或者只是返回类型不同,你就无法通过简单的重载实现这一点。那么你将不得不使用显式实现。一个例子是List<T>
实现了IEnumerable
和IEnumerable<T>
,并且都有GetEnumerator()
,但返回值不同。