我在 VS2010 中有两个用于实现接口的选项。
当我有 IHelper.cs 界面如下:
public interface IHelper
....
IEnumerable<IPort> Ports { get; }
“显式实现接口”给出了以下代码:
IEnumerable<IPort> IHelper.Ports
{
get
{
...
}
}
并且,“实现接口”给了我这个代码:
public IEnumerable<IPort> Ports
{
get
{
...
}
}
它们是相同还是不同?为什么在 C# 中实现接口有两种选择?
显式接口声明意味着接口成员在接口本身以外的类型上不可用,因此在公开访问它们之前,需要将实现类型强制转换为接口。
隐式是实现大多数接口的标准方式,在实现者类型的公共 API 上公开接口项。
主要原因显式接口定义的目的是避免命名冲突,如果您碰巧实现了两个包含具有相同签名的方法的接口...显式定义允许编译器保持签名足够不同以进行解析。
正如 XenoPuTtSs 在评论中所建议的,支持代码维护的第二个原因是,如果删除方法签名,显式定义将在实现类型上触发编译器错误。在隐式实现上,从接口中删除方法将使该方法成为任何类型的常规成员 - 这意味着您需要手动搜索现已失效的方法实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)