为了账号安全,请及时绑定邮箱和手机立即绑定

隐式与显式接口实现

隐式与显式接口实现

holdtom 2019-12-16 11:08:37
隐式与显式接口实现有人会解释这两种野兽之间的区别以及如何使用它们。在AFAIK中,许多2.0版之前的类都是在没有泛型的情况下实现的,因此导致后者的版本同时实现两种接口。这是为什么唯一需要使用它们的情况?您还可以深入解释如何使用它们吗?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

基本上,通过隐式接口实现,您可以访问接口方法和属性,就像它们是类的一部分一样。使用显式接口实现,您只能在将其视为该接口时访问它们。

就何时使用另一个接口而言,有时您必须使用显式接口实现,因为您要么具有与接口具有相同签名的属性/方法,要么想要实现具有相同签名的两个接口并具有不同的实现那些匹配的属性/方法。

以下规则来自Brad Abrams 设计指南博客。

  • 不要将显式成员用作安全边界。任何将实例投射到接口的客户端都可以调用它们。

  • 不要使用显式成员来隐藏实现细节

  • 不要使用显式成员来近似私有接口的实现。

  • 不要公开另一种方法来访问允许子类重写的任何显式实现的成员。除非会发生冲突,否则请使用相同的方法名称。

在布拉德(Brad)博客的评论中还提到,在对值类型使用显式实现时涉及拳击,因此请注意性能成本。


查看完整回答
反对 回复 2019-12-16
?
千万里不及你

TA贡献1784条经验 获得超9个赞

用外行的话来说,如果一个类继承自2个或更多接口,并且这些接口碰巧具有相同的方法名,则如果您使用隐式接口实现,则该类将不知道正在实现哪种接口方法。这是您显式实现接口时的场景之一。


隐式接口实现


public class MyClass : InterfaceOne, InterfaceTwo

{

    public void InterfaceMethod()

    {

        Console.WriteLine("Which interface method is this?");

    }

}


interface InterfaceOne

{

    void InterfaceMethod();

}


interface InterfaceTwo

{

    void InterfaceMethod();

}

显式接口实现


public class MyClass : InterfaceOne, InterfaceTwo

{

    void InterfaceOne.InterfaceMethod()

    {

        Console.WriteLine("Which interface method is this?");

    }


    void InterfaceTwo.InterfaceMethod()

    {

        Console.WriteLine("Which interface method is this?");

    }

}


interface InterfaceOne

{

    void InterfaceMethod();

}


interface InterfaceTwo

{

    void InterfaceMethod();

}


查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 494 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信