0

これを行うことに違いはありますか:

Public Class Class1
    Protected Test1 As String
    Public Sub New(ByVal test2 As String)
        Test1 = test2
    End Sub
End Class

Public Class Class2
    Inherits Class1

    Public Sub New()
        MyBase.New("called from class 2")
    End Sub

End Class

この:

Public Class Class1
    Protected Test1 As String
End Class

Public Class Class2
    Inherits Class1

    Public Sub New()
        Test1 = "Called from class 2"
    End Sub
End Class

最初の例では、スーパークラスのインスタンス変数がコンストラクターで初期化されます。2 番目の例では、スーパークラスのインスタンス変数がサブクラスで初期化されます。

私が尋ねる理由は、サブクラスからこれをやろうとしているからです:

Public Sub New()
        MyBase.New(                   System.Configuration.ConfigurationManager.AppSettings.Item("PurgeFile" & Me.GetType.Name), & _
               System.Configuration.ConfigurationManager.AppSettings.Item("PurgeHeader" & Me.GetType.Name) )
        End Sub

「別のコンストラクターを呼び出す場合、構築中のオブジェクトへの参照は無効です」というエラーが表示されます。

4

1 に答える 1

2

Me呼び出し内で使用できないためMyBase.New()、コードの次の部分は無効です。

Me.GetType.Name

アップデート

あなたの 2 つのサンプルには大きな違いがありますClass1

私はむしろ次のようなことを考えたいです:

Public MustInherit Class Class1
    Public MustOverride ReadOnly Property Test1 As String
End Class

Public Class Class2
    Inherits Class1

    Private _Test1 As String = "Called from class 2"

    Public Overrides ReadOnly Property Test1 As String
        Get
            Return _Test1
        End Get
    End Property
End Class

MSDN からの参照

于 2013-03-27T12:15:54.763 に答える