为什么多重继承不是接口的主要目的?

时间:2017-05-31 15:11:26

标签: c# oop inheritance interface multiple-inheritance

我的老师一直说接口不存在,所以可以使用它们作为在c#中实现多重继承的方法。

为什么?那他们是什么?没有人可以轻易地向我解释这一点,我很困惑。

我阅读了一些描述接口的文章和书籍,似乎所有人都建议使用接口作为解决方法来实现多重继承。

2 个答案:

答案 0 :(得分:2)

在静态类型语言中,或者在同时具有动态和静态类型的语言(例如C#)中使用静态类型时,继承由两部分组成。界面和实现。该接口是一个合同,表示它将满足一组特定的方法或属性。实现是实际执行它的代码。代码实现接口。

接口用于保证对象实现特定的合同。这可以是单个合同,也可以是多个合同。这不是多重继承,它继承了接口和实现。

是的,有些人尝试使用多个接口来模拟多重继承,但这不是它的目的,并且模拟非常差。

多个接口表示对象支持多个合同。多重继承表示对象重用多个实现。同样,继承需要接口和实现。接口实现就是接口。

答案 1 :(得分:1)

接口形成合同(他们说对象可以做什么),但不提供实现。

为什么要这么麻烦?定义合同是额外的工作,为什么不创建一个类?

例如,我们假设您要开发绘图应用。您可能会想出一些对象,如圆形,三角形,方形等,然后您开始添加方法并添加类似Draw()的内容。这是你可以添加到所有形状实现的界面的东西。在C#中,按照惯例,它的名称类似于IDrawable

但为什么不上课?

让我们想象您正在扩展应用程序并添加对形状分组的支持,以创建更复杂的模式。这些组也可以绘制,因此它们也有Draw()方法。现在,如果你只想绘制"",你不需要知道它是一个形状或一个群体,还是你尚未发明的其他东西。

但为什么不上课?

因为可能有更多功能,例如Move()Serialize()等,而C#不允许您从多个类继承。

为什么不呢?

这不是技术限制,而是C#语言设计者的选择。有些语言,如C ++允许,但它带来的技术问题很少,最着名的是diamond problem。它还使编译器更复杂,并且已经确定it is not worth it。它也