vb.net: множественное наследование в интерфейсе - PullRequest
10 голосов
/ 16 апреля 2011

У меня проблема с множественным наследованием в 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

Но теперь мне нужно реализовать определенные методы из BaseInterface1 и BaseInterface2 в классе InterfaceName. Но так как InterfaceName тоже должен быть интерфейсом, мне не нужно реализовывать эти методы в этом классе.

В C # вы можете сделать это довольно просто:

public interface InterfaceName: BaseInterface1, BaseInterface2 {}

Знаете ли вы, если я могу сделать что-то подобное в VB.net?

Ответы [ 4 ]

25 голосов
/ 16 апреля 2011

Подобно Java, в интерфейсах VB.NET «расширяют» другие интерфейсы. Это означает, что они «наследуют» свою функциональность. Они не реализуют это.

Public Interface InterfaceName
    Inherits BaseInterface1, BaseInterface2
End Interface
9 голосов
/ 16 апреля 2011

Попробуйте

Public Interface InterfaceName
    Inherits BaseInterface1
    Inherits BaseInterface2
End Interface
0 голосов
/ 14 апреля 2013

Я был бы осторожен при наследовании интерфейсов.

Хотя это работает, я обнаружил, что если вы связываете BindingList (Of InterfaceName) с BindingSource и BindingSource с DataGridView, то свойства в Interface1 и Interface2 не будут видны конструктору Visual Studio DataGridView для выделения в виде столбцов для DataGridView.

0 голосов
/ 17 июля 2011

Обходной путь - передать абстрактному классу (mustinherit) задание для определения каждого элемента в интерфейсе, который он не хочет реализовывать с помощью mustoverride. Постарайтесь заранее определить каждое из них в общем смысле, если это возможно, и сделать его перезаписываемым.

...