实现接口在C#中显式实现接口

参见英文答案 > C# Interfaces. Implicit implementation versus Explicit implementation                                    11
VS2010中有两个实现接口的选项.

当我有IHelper.cs界面如下:

public interface IHelper
    ....
    IEnumerable<IPort> Ports { get; }

“实现接口显式”给出这个代码:

    IEnumerable<IPort> IHelper.Ports
    {
        get
        {
            ...
        }
    }

而且,“实现接口”给我这个代码:

    public IEnumerable<IPort> Ports
    {
        get
        {
            ...
        }
    }

它们是一样还是不同?为什么在C#中实现接口有两个选择?

最佳答案
显式接口声明意味着接口成员在接口本身以外的类型上不可用,因此在公开访问它们之前,需要将实现类型转换为接口.

隐式(大多数接口实现的标准方式)暴露了实现者类型的公共API中的接口项.

显式接口定义的主要原因是避免命名冲突,如果您碰巧实现包含具有相同签名的方法的两个接口,则显式定义允许编译器保持签名不够清晰.

支持代码维护的一个次要原因是XenoPuTtSs在注释中提出的,即如果删除方法签名,显式定义将触发实现类型的编译器错误.在隐式实现中,从接口中删除方法将使该方法作为任何类型的常规成员 – 这意味着您需要手动搜索现在执行的方法实现.

转载注明原文:实现接口在C#中显式实现接口 - 代码日志