【发布时间】:2011-07-11 12:35:02
【问题描述】:
c#/asp.net中显式接口和隐式接口实现有什么区别?在什么场景下我们可以使用显式接口和隐式接口实现。
谢谢,
普雷迪普
【问题讨论】:
c#/asp.net中显式接口和隐式接口实现有什么区别?在什么场景下我们可以使用显式接口和隐式接口实现。
谢谢,
普雷迪普
【问题讨论】:
隐式和显式实现背后的概念相当简单:
至于为什么以及何时使用一种或另一种,这取决于。如果您使用相同的属性/方法实现多个接口,则显式实现是您唯一的选择,因为它是了解您打算调用哪个属性/方法的唯一方法。显然,在这种情况下,您不能在类本身上拥有该属性/方法:如果有,它将只是类,并且不会匹配任何接口(它们将具有其显式实现)。
在其他情况下,这实际上取决于您的设计选择以及您想要完成的任务。如果你想强制调用者只通过接口访问接口成员,而不是通过类声明,做一个显式实现。
【讨论】:
假设您有两个接口,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,这样读写起来有点烦人。通常这仅在您想多次实现具有相同签名的方法以满足多个接口时使用。
【讨论】: