VB .Net中是否可以进行多重继承?

时间:2008-12-08 22:50:26

标签: vb.net inheritance multiple-inheritance

VB .Net中是否可以进行多重继承?如果是这样,语法是什么?

4 个答案:

答案 0 :(得分:18)

简答:否

稍微长一点的回答:是的,如果你继承了多个接口和一个基类。由于这通常是MI的原因(您希望实现多个接口),通常就足够了。但是,在那些“实际”MI很有用的罕见情况下,.NET会阻止您这样做。

答案 1 :(得分:4)

VB.Net中的限制方式可能与C#中的方式相同:通过接口。由于接口本质上是一个纯抽象的基类,因此您可以根据需要从一个真正的类中继承它们。

答案 2 :(得分:1)

您想要做的事情可能就是组合或聚合(参见here for design pattern)。也许你正在定义一种行为。你总是可以在基类中实现一个接口SomeInterface,有一个SomeInterface类型的成员(它允许它是任何实现SomeInterface的类,因此可以让代码执行),在成员构造函数中传递对基类的引用如果需要,它拥有它(如果这样做,尝试添加另一个接口来定义回调,基类将实现它,子类将它作为成员变量类型)。使用对成员类的调用来实现SomeInterface。这样,代码在另一个类中实现,这使得它易于维护,但是你没有进行多重继承。

构图背后的想法是发动机不是汽车而是汽车有发动机。汽车需要一个发动机,但不需要知道整个发动机单元如何工作,只需要知道如何与它连接。所以引擎不应该继承汽车。但让汽车实施发动机是愚蠢的。所以汽车作为整车的成员获得发动机,但作为一个对象。汽车有一个发动机作为其组成的一部分。

听起来你正在做的更像是一种行为,就像一个有庸医行为的鸭子对象,但橡皮鸭是鸭子,但不要嘎嘎而是发出吱吱声。因此它们与野鸭物体不同,但两者都有许多共同的鸭子特征。所以你想要一个每个实现不同的庸医界面。但是很多鸭子会为这个界面嘎嘎叫,所以你不想为每个人写嘎嘎。这就是你使用组合来实现庸医行为界面的地方。

答案 3 :(得分:1)

据我所知,VB.net一般不支持多继承,但是你可以通过使用接口来实现一种多重继承(使用“Implements”而不是“Inherits”):

Public Class ClassName
    Implements BaseInterface1, BaseInterface2

End Class

这适用于类,但我希望有一个接口继承一些基接口。这样的事情:

Public Interface InterfaceName
    Implements BaseInterface1, BaseInterface2

End Interface

但接口不允许使用“Implements”关键字(当然,这是有道理的)。我尝试使用一种我从Java中知道的抽象类:

Public MustInherit Class InterfaceName
    Implements BaseInterface1, BaseInterface2

End Class

但是现在我需要在InterfaceName类中实现BaseInterface1和BaseInterface2中定义的方法。但是,由于InterfaceName也应该是一个接口,我不想在该类中实现这些方法。

在C#中你可以很容易地做到这一点:

public interface InterfaceName: BaseInterface1, BaseInterface2 {}