Перегруженный конструктор в абстрактном классе в vb.NET - PullRequest
1 голос
/ 20 ноября 2010

У меня есть абстрактный класс в vb.net с двумя подклассами. В абстрактном классе у меня есть конструктор, который выглядит так:

Public Sub New(arg1 as String, arg2 as String)
    Me.arg1 = arg1
    Me.arg2 = arg2
End Sub

Я хотел бы создать второй конструктор, который не принимает аргументов и просто инициализирует аргументы значениями по умолчанию. Это будет выглядеть так:

Public Sub New()
    Me.arg1 = "123"
    Me.arg2 = "456"
End Sub

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 ноября 2010

В VB нет "абстрактного". Если вы имеете в виду абстрактный в смысле c # (MustInherit на языке VB), то вам нужно определить оба конструктора в ваших подклассах, поскольку конструкторы не наследуются.

Пример:

Public MustInherit Class SuperClass
    Public Property ValueOne As String = String.Empty

    Public Property ValueTwo As String = String.Empty


    Public Sub New()

        Me.New("123", "456")

    End Sub

    Public Sub New(ByVal tValueOne As String, ByVal tValueTwo As String)

        Me.ValueOne = tValueOne
        Me.ValueTwo = tValueTwo

    End Sub    
End Class



Public Class SubClass
    Inherits SuperClass


    Public Sub New()

        MyBase.New()

    End Sub

    Public Sub New(ByVal tValueOne As String, ByVal tValueTwo As String)

        MyBase.New(tValueOne, tValueTwo)

    End Sub  

End Class
0 голосов
/ 20 ноября 2010

Если ваш второй конструктор находится в подклассе, он должен вызвать конструктор в базовом классе.

Public Sub New() 
    MyBase.New("123", "456") 
End Sub 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...