隐式与显式接口实现
可能重复:
C#:接口 - 隐式和显式实现
有人会解释这两个野兽之间的差异以及如何使用它们。 AFAIK,很多pre.2.0类都是在没有泛型类型的情况下实现的,因此后一版本实现了两种接口类型。 是唯一需要使用它们的情况吗?
你能否深入解释如何使用它们?
谢谢
这里有一篇很好而且非常详细的博客文章。
基本上使用隐式接口实现,您可以像访问类的一部分一样访问接口方法和属性。 使用显式接口实现时,只能将它视为该接口来访问它们。
对于何时使用其中一个,有时您必须使用明确的接口实现,因为您的接口具有与接口具有相同签名的属性/方法,或者要实现具有相同签名且具有不同实现的两个接口那些匹配的属性/方法。
以下规则来自Brad Abrams设计指南博客。
在Brad的博客中的评论中也提到,在对值类型使用显式实现时涉及拳击,因此要注意性能成本。
通俗地说,如果一个类继承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();
}
以下链接有一个很好的视频来解释这个概念
显式接口实现
从迷宫般的实现本身,还有另外一种方法可以看到它:http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx。
但简而言之,隐式实现为您提供了is-a类型转换,除非对象显式类型转换为该接口类型,否则显式实现将无法访问。
链接地址: http://www.djcxy.com/p/50419.html