公开暴露显式接口的目的是什么?

时间:2010-08-25 01:50:50

标签: c#

公共显式界面有什么意义?这与私有界面有什么不同?

interface IYer
{
    void Hello();
}

interface INer
{
    void Hello();
}

class MyClass : IYer, INer
{
    public void IYer.Hello()
    {
        throw new NotImplementedException();
    }

    public void INer.Hello()
    {
        throw new NotImplementedException();
    }
}

3 个答案:

答案 0 :(得分:1)

没有公开的显式接口实现。显式实现接口的唯一方法是让方法具有默认的可访问性,并在方法名称前加上接口名称:

class MyClass : IYer, INer
{
    //compiles OK
    void IYer.Hello()
    {
        throw new NotImplementedException();
    }

    //error CS0106: The modifier 'public' is not valid for this item
    public void INer.Hello()
    {
        throw new NotImplementedException();
    }
}

这是MSDN对此的评价:

  

显式接口声明中不允许使用public关键字。在这种情况下,请从显式接口声明中删除public关键字。

答案 1 :(得分:1)

我不打算解决上面的代码,我相信其他人指出了错误,但我会自己回答这个问题。

  1. 通过显式接口实现,您可以支持多个名称冲突的接口。
  2. 当界面对该类的大多数消费者不重要时,您应避免强调客户端接口的可用性。这是因为在您可以使用显式实现的接口中的方法之前,Dotnet框架中的大多数语言都需要对接口进行显式强制转换。
  3. 不太重要,但我用它们来防止意外使用方法或属性访问器:Using Explicit Interfaces to prevent accidental modification of properties in C#

答案 2 :(得分:0)

最大的区别是你的公共显式接口不合法,不会编译。实际上,您应该收到错误,“修饰符'public'对显式接口实现无效。”