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

接口-有什么意义?

接口-有什么意义?

慕侠2389804 2019-10-23 12:51:15
接口的原因确实使我难以理解。据我了解,这是针对C#中不存在的不存在的多重继承的一种解决方法(或者有人告诉我)。我所看到的是,您预先定义了一些成员和函数,然后必须在类中重新定义它们。从而使接口冗余。只是感觉像语法...好吧,对我来说是垃圾(请不要冒犯。在下面给出的示例中,该示例是在堆栈溢出时从不同的C#接口线程获取的,我只是创建一个称为Pizza的基类而不是一个接口。简单示例(来自不同的堆栈溢出贡献)public interface IPizza{    public void Order();}public class PepperoniPizza : IPizza{    public void Order()    {        //Order Pepperoni pizza    }}public class HawaiiPizza : IPizza{    public void Order()    {        //Order HawaiiPizza    }}
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

关键是接口代表合同。任何实现类都必须具有的一组公共方法。从技术上讲,该接口仅控制语法,即,那里有什么方法,它们得到什么参数以及它们返回什么。通常,它们也封装语义,尽管只能通过文档进行封装。

然后,您可以使用接口的不同实现,并随意替换它们。在您的示例中,由于每个披萨实例都是一个,因此IPizza您可以IPizza在处理未知披萨类型的实例的任何地方使用。类型继承自的任何实例IPizza都可以保证可排序,因为它具有Order()方法。

Python不是静态类型的,因此类型会在运行时保留并查找。因此,您可以尝试Order()在任何对象上调用方法。只要对象具有这样的方法,运行时就很高兴,并且可能只是耸耸肩说“ Meh。”(如果没有)。在C#中不是这样。编译器负责进行正确的调用,如果只是随机的,object则编译器尚不知道运行时实例是否具有该方法。从编译器的角度来看,它是无效的,因为它无法验证它。(您可以使用反射或dynamic关键字来执行此类操作,但是我猜这有点远了。)

还要注意,通常意义上的接口不一定必须是C#interface,它也可以是抽象类甚至是普通类(如果所有子类都需要共享一些通用代码,则可以派上用场)但是interface就足够了)。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号