3

継承されたオブジェクトから基本クラスのコンストラクターを呼び出そうとすると、コンパイラ エラーが発生する理由を説明してもらえますか? 私が言及していることの簡単な例を含めました。

Public Class Person
    Public name As String

    Public Sub New()
        name = "John Doe"
    End Sub

    Public Sub New(Name As String)
        name = Name
    End Sub

End Class

Public Class NamedPerson
    Inherits Person

    Public Sub New(FirstName As String, LastName As String)
        name = FirstName & " " & LastName
    End Sub

    'adding this makes it work
    Public Sub New(Name As String)
       MyBase.New(Name)
    End Sub

End Class

'Valid
Dim guy1 As Person = New Person()

'Valid 
Dim guy2 As Person = New Person("John Smith")

'Valid
Dim guy3 As NamedPerson = New NamedPerson("John", "Smith")

'Compiler Error
Dim guy4 As NamedPerson = New NamedPerson("John Smith")
4

1 に答える 1

5

子クラスは、基本型からコンストラクターを継承しません。子クラスは、独自のコンストラクターを定義する責任があります。さらに、定義する各コンストラクターが暗黙的または明示的に基本クラスのコンストラクターを呼び出すか、同じ型の別のコンストラクターにチェーンするようにする必要があります。

詳細については、次を参照してください: インスタンス コンストラクター

サンプルクラスから、

Public Class NamedPerson
    Inherits Person

    Public Sub New(Name As String)
        MyBase.New(Name)
    End Sub

    Public sub New(FirstName As String, LastName As String)
        name = FirstName & " " & LastName
    End Sub
End Class
于 2012-09-12T03:25:43.670 に答える