2011-04-15 50 views
8

我面對關於VB.net多重繼承問題的多重繼承:vb.net:在接口

據我所知VB.net不支持多重繼承一般,但你可以達到一種用接口工作多繼承的(使用「器具」,而不是「繼承」):

Public Class ClassName 
    Implements BaseInterface1, BaseInterface2 

End Class 

,對於類工作正常,但我想有一個接口繼承一些基本接口。類似的東西:

Public Interface InterfaceName 
    Implements BaseInterface1, BaseInterface2 

End Interface 

但「接口」關鍵字不允許用於接口(當然是有道理的)。我試圖用一種抽象類的,我從Java知道:

Public MustInherit Class InterfaceName 
    Implements BaseInterface1, BaseInterface2 

End Class 

但現在我需要實現從BaseInterface1和BaseInterface2的InterfaceName中類中定義的方法。但是,因爲InterfaceName也應該是一個接口,所以我不想在該類中實現這些方法。

在C#中,你可以做到這一點很簡單:

public interface InterfaceName: BaseInterface1, BaseInterface2 {} 

你知道,如果我能做到在VB.net類似的東西?

回答

21

與Java類似,在VB.NET接口 「擴展」 其他接口。這意味着他們「繼承」了他們的功能。他們沒有實現它。

Public Interface InterfaceName 
    Inherits BaseInterface1, BaseInterface2 
End Interface 
+0

你完全正確。我不知道爲什麼我使用了Implements關鍵字。當然你必須使用Inherits!坦克 – Erwin 2011-04-18 14:04:47

8

嘗試

Public Interface InterfaceName 
    Inherits BaseInterface1 
    Inherits BaseInterface2 
End Interface 
+0

工作正常。謝謝! – Erwin 2011-04-18 14:04:22

0

一種解決方法是讓抽象類(爲MustInherit)通過在它不希望與mustoverride實現接口定義每個項目的工作。如果可能,儘量預先定義每一個,並使其覆蓋。

0

繼承接口時我會小心。

雖然它有效,但我發現如果將BindingList(Of InterfaceName)綁定到BindingSource並將BindingSource綁定到DataGridView,則對於Visual Studio DataGridView設計器,Interface1和Interface2中的屬性對於分配爲列到DataGridView。

+2

這是IDE的限制。它不應該對您的代碼施加限制。 – pickypg 2013-04-14 19:55:07