有人会解释这两种野兽之间的差异以及如何使用它们。 AFAIK,许多pre.2.0类在没有泛型类型的情况下实现,因此导致后一版本实现这两种接口。是唯一需要使用它们的情况吗?
您还可以深入解释如何使用它们吗?
由于
答案 0 :(得分:112)
There is a good and pretty detailed blog post about this.
基本上使用隐式接口实现,您可以访问接口方法和属性,就好像它们是类的一部分一样。使用显式接口实现,只有在将其视为该接口时才能访问它们。
就何时使用一个而不是另一个而言,有时您必须使用显式接口实现,因为您要么具有与接口具有相同签名的属性/方法,要么您希望实现具有相同签名的两个接口并具有匹配的那些属性/方法的不同实现。
以下规则来自Brad Abrams design guidelines blog。
Brad的博客评论中也提到,在价值类型上使用显式实现时会涉及到拳击,因此请注意性能成本。
答案 1 :(得分:22)
通俗地说,如果一个类继承自2个或更多接口,并且接口碰巧具有相同的方法名,那么如果使用隐式接口实现,则该类不知道正在实现哪个接口方法。这是您明确实现接口的场景之一。
隐式界面实施
public class MyClass : InterfaceOne, InterfaceTwo
{
public void InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
显式界面实施
public class MyClass : InterfaceOne, InterfaceTwo
{
void InterfaceOne.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
void InterfaceTwo.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
以下链接有一个很好的视频解释这个概念
Explicit Interface Implementation
答案 2 :(得分:4)
还有一种方法可以从迷宫实现本身来看:http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx。
但简而言之,隐式实现为您提供了一种类型转换,除非对象显式地类型转换为该接口类型,否则无法访问显式实现。