c#中显式和隐式接口实现的区别是什么

时间:2011-07-11 12:35:02

标签: c# asp.net oop

c#/ asp.net中显式接口和隐式接口实现有什么区别?在哪种情况下我们可以使用显式接口和隐式接口实现。

谢谢,

与Pradeep

2 个答案:

答案 0 :(得分:5)

隐式和显式实现背后的概念相当简单:

  • 具有隐式实现的成员可以通过界面以及通过实现它的类来访问
  • 只能通过界面访问具有显式实现的成员

至于为何以及何时使用其中一种,取决于它。如果您使用相同的属性/方法实现多个接口,则显式实现是您唯一的选择,因为它是了解您打算调用哪个属性/方法的唯一方法。显然在这种情况下你不能在类本身上拥有那个属性/方法:如果存在,它将只是类,并且不会匹配任何接口(它们将明确地实现它)。

在其他情况下,它实际上取决于您的设计选择以及您要完成的任务。如果要强制调用者仅通过接口访问接口成员,而不是通过类声明,请执行显式实现。

答案 1 :(得分:2)

假设您有两个接口,IDoStuff<T>IDoStuff,您的类实现了这些接口。它们都有一个方法“GetStuff”,但其中一个具有签名T GetStuff(),另一个具有签名object GetStuff()

问题是.net不会让你有两个名称相同的方法只在返回类型上有所不同。但是您需要在类中同时使用这两种方法来满足这两个接口。如果T实际上是object,那么您可以使用这样的显式实现。

public T GetStuff()
{
  T stuff;
  //Stuff Is Got
  return stuff;
}

IDoStuff.GetStuff()
{
  return (object)GetStuff();
}

请注意,由于IDoStuff要求GetStuff的安全要求,IDoStuff.GetStuff将基于该接口的声明public/private/protected/internal

如果你愿意,你可以明确地进行每次植入,但是每个植入的完整方法名称都是InterfaceName.MethodName,并且读取和写入有点烦人。通常,只有在想要多次实现具有相同签名的方法以满足多个接口时才会使用此方法。