Можете ли вы унаследовать sub новый (конструктор) с параметрами в VB?

Хотя стандарт C ++ не имеет такого требования, некоторым компиляторам требуется, чтобы все шаблоны функций и классов были доступны в каждой используемой системе переводов. Фактически для этих компиляторов тела шаблонных функций должны быть доступны в файле заголовка. Повторить: это означает, что эти компиляторы не позволят их определять в файлах без заголовка, таких как .cpp-файлы

Существует ключевое слово export , которое должно смягчать этот проблема, но он нигде не близок к тому, чтобы быть портативным.

41
задан Robert 3 July 2015 в 10:10
поделиться

2 ответа

Вы видите поведение «По замыслу». Дочерние классы не наследуют конструкторы от их базовых типов. Дочерний класс отвечает за определение своих собственных конструкторов. Кроме того, он должен гарантировать, что каждый конструктор, который он определяет, явно или неявно обращается к конструктору базового класса или связывается с другим конструктором того же типа.

Вам нужно будет определить один и тот же конструктор для всех дочерних классов и явно подключиться к базовому конструктору через MyBase.New. Пример

Class ChildClass
  Inherits BaseClass
  Public Sub New(text As String)
    MyBase.New(text)
  End Sub
End Class

Документация, которую вы ищете, - это раздел 9.3.1 спецификации языка VB.

Я думаю, что наиболее релевантным разделом является следующий (примерно начало второй страницы)

Если тип не содержит объявлений конструктора экземпляра, автоматически предоставляется конструктор по умолчанию. Конструктор по умолчанию просто вызывает конструктор без параметров прямого базового типа.

Это явно не означает, что дочерний класс не будет наследовать конструкторы, но это побочный эффект оператора.

57
ответ дан 27 November 2019 в 00:43
поделиться

Параметризованные конструкторы не могут наследоваться так же, как методы экземпляра. Вам необходимо реализовать конструктор в дочернем классе, а затем вызвать конструктор родителя, используя MyBase.

Public Class ChildClass
    Inherits BaseClass

    Public Sub New (ByVal SetText As String)
      MyBase.New(SetText)
    End Class
End Class

Public Class TestClass
  Public TestChild AS New ChildClass("c")
End Class

Это ограничение не относится к VB. Из того, что я могу понять, это определенно невозможно и в C #, Java или C ++.

Вот один связанный пост с тем же вопросом о C ++:
c-superclass-constructor-call-rules

8
ответ дан 27 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: