vb.net:接口中的多重继承

Posted

技术标签:

【中文标题】vb.net:接口中的多重继承【英文标题】:vb.net: multiple inheritance in an interface 【发布时间】:2011-08-06 15:16:06 【问题描述】:

我在 VB.net 中遇到了关于多重继承的问题:

据我所知,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 

你知道我是否可以在 VB.net 中做类似的事情吗?

【问题讨论】:

【参考方案1】:

类似于 Java,在 VB.NET 接口中“扩展”其他接口。这意味着他们“继承”了他们的功能。他们没有实现它。

Public Interface InterfaceName
    Inherits BaseInterface1, BaseInterface2
End Interface

【讨论】:

你完全正确。我不知道为什么我使用了 Implements 关键字。当然你必须使用继承!坦克【参考方案2】:

试试

Public Interface InterfaceName
    Inherits BaseInterface1
    Inherits BaseInterface2
End Interface

【讨论】:

【参考方案3】:

一种解决方法是让抽象类(mustinherit)传递定义接口中的每个项目的工作,它不想用 mustoverride 实现。如果可能,请尝试在一般意义上预定义每一个,并使其可覆盖。

【讨论】:

【参考方案4】:

继承接口时我会小心。

虽然它有效,但我发现如果将 BindingList(Of InterfaceName) 绑定到 BindingSource 并将 BindingSource 绑定到 DataGridView,则 Visual Studio DataGridView 设计器看不到 Interface1 和 Interface2 中的属性,无法将其作为列分配给DataGridView。

【讨论】:

这是 IDE 的限制。它不应该对您的代码施加限制。

以上是关于vb.net:接口中的多重继承的主要内容,如果未能解决你的问题,请参考以下文章

java中的多重继承是啥意思?

如何将此多重继承转换为Java中的接口?

C++中的多重继承

Java中的多重继承

使用与多重继承相关的接口的任何真实示例

为啥要使用接口,多重继承与接口,接口的好处?