这样做有什么区别吗?
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
和我得到一个错误:"引用一个正在构建的对象是无效的调用另一个构造函数"。
您不能在MyBase.New()
调用中使用Me
,因此以下部分代码无效:
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的参考