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

在第一个示例中,超类实例变量在构造函数中初始化。在第二个示例中,超类实例变量在子类中初始化。

我问的原因是因为我试图从子类中做到这一点:

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

您不能MeMyBase.New()通话中使用,因此以下部分代码无效:

Me.GetType.Name

更新

你的两个样本有很大的不同:第一个不允许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 回答