c#中显式和隐式接口实现的区别是什么?
本文关键字:区别 是什么 实现 接口 | 更新日期: 2023-09-27 18:01:49
c#/asp.net中显式接口和隐式接口实现的区别是什么?在这种情况下,我们可以使用显式接口和隐式接口实现。
谢谢,
Pradeep
隐式和显式实现背后的概念相当简单:
- 具有隐式实现的成员可以通过接口和实现它的类访问
- 具有显式实现的成员将只能通过接口访问
至于为什么和何时使用其中一个,这要看情况。在使用相同的属性/方法实现多个接口的情况下,显式实现是您唯一的选择,因为这是知道您打算调用哪个属性/方法的唯一方法。显然,在这种情况下,您不能在类本身上拥有该属性/方法:如果有,它将只是类,并且将不匹配任何接口(将有其显式实现)。
在其他情况下,这实际上取决于你的设计选择和你想要实现的目标。如果您希望强制调用方仅通过接口而不是通过类声明来访问接口成员,请执行显式实现。
假设您有两个接口,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
,这对读写来说有点麻烦。通常,只有当您希望多次实现具有相同签名的方法以满足多个接口时,才会使用此方法。