我的老师一直说接口不存在,所以可以使用它们作为在c#中实现多重继承的方法。
为什么?那他们是什么?没有人可以轻易地向我解释这一点,我很困惑。
我阅读了一些描述接口的文章和书籍,似乎所有人都建议使用接口作为解决方法来实现多重继承。
答案 0 :(得分:2)
在静态类型语言中,或者在同时具有动态和静态类型的语言(例如C#)中使用静态类型时,继承由两部分组成。界面和实现。该接口是一个合同,表示它将满足一组特定的方法或属性。实现是实际执行它的代码。代码实现接口。
接口用于保证对象实现特定的合同。这可以是单个合同,也可以是多个合同。这不是多重继承,它继承了接口和实现。
是的,有些人尝试使用多个接口来模拟多重继承,但这不是它的目的,并且模拟非常差。
多个接口表示对象支持多个合同。多重继承表示对象重用多个实现。同样,继承需要接口和实现。接口实现就是接口。
答案 1 :(得分:1)
接口形成合同(他们说对象可以做什么),但不提供实现。
为什么要这么麻烦?定义合同是额外的工作,为什么不创建一个类?
例如,我们假设您要开发绘图应用。您可能会想出一些对象,如圆形,三角形,方形等,然后您开始添加方法并添加类似Draw()
的内容。这是你可以添加到所有形状实现的界面的东西。在C#中,按照惯例,它的名称类似于IDrawable
。
但为什么不上课?
让我们想象您正在扩展应用程序并添加对形状分组的支持,以创建更复杂的模式。这些组也可以绘制,因此它们也有Draw()
方法。现在,如果你只想绘制"",你不需要知道它是一个形状或一个群体,还是你尚未发明的其他东西。
但为什么不上课?
因为可能有更多功能,例如Move()
,Serialize()
等,而C#不允许您从多个类继承。
为什么不呢?
这不是技术限制,而是C#语言设计者的选择。有些语言,如C ++允许,但它带来的技术问题很少,最着名的是diamond problem。它还使编译器更复杂,并且已经确定it is not worth it。它也