c#中多重继承和接口的区别

时间:2010-06-18 11:37:42

标签: c# .net

c#是否真的支持多重继承。人们说它支持接口形式的多重继承?但我不这么认为

4 个答案:

答案 0 :(得分:7)

从字面意义上讲,它不支持多重继承。它可以实现多个接口,这些接口提供多态行为,因此可以获得多重继承的一些好处。但是你没有基本行为。

如果您需要基本行为,则基本类通用策略是实现接口,派生类在需要时覆盖此实现。

我还没有遇到多重继承的需要,我不认为C#因缺乏它而受苦。

答案 1 :(得分:1)

在面向对象语言的理论中,在谈论C#/ Java /等中的继承时,有两个概念经常混合在一起。

子类型意味着可以以一种可以将其转换为(或视为)其他更简单类型(称为超类型)的方式编写单个类。在C#术语中,这意味着您可以将对象传递给期望父类或接口的方法。 C#中的对象显然可以有多个超类型(父级+所需的多个接口)

子类表示类型从其他类型继承实现。在C#中,当您有父类时会发生这种情况,但是当您实现接口时却不会(因为您没有从接口继承任何实现)。因此,C#允许您只有一个超类(=父类)。

答案 2 :(得分:0)

代理实现(IOD)是一种非常简单的编码技术,允许开发人员在C#中快速实现系统接口和多继承(我知道:不支持:))

好吧,整个想法基本上是拥有一个所需类型的类字段,并根据对成员字段的隐藏调用公开该类的公共属性

因此,如果我们有像A类和B类的东西是C类的父母。当我们有一个应该能够处理和呈现客户列表的用户控件时,可能就是这种情况的一个例子。 / p>

因为用户控件和List是bot类,你不能直接通过继承来做到这一点,因为在c#的情况下不支持多重继承(我很高兴因为我认为多重继承不是正确使用经常导致类爆炸反模式)

答案 3 :(得分:0)

语言设计者决定不允许在C#中进行多重继承。它一直是discussed before