我在vb.net中有一个带有两个子类的抽象类。在抽象类中,我有一个看起来像这样的构造函数:
Public Sub New(arg1 as String, arg2 as String)
Me.arg1 = arg1
Me.arg2 = arg2
End Sub
我想创建第二个不带任何参数的构造函数,只是将args初始化为默认值。它看起来像这样:
Public Sub New()
Me.arg1 = "123"
Me.arg2 = "456"
End Sub
当我尝试使用第二个构造函数创建一个新的子类时,编译器抱怨我错过了构造函数的两个args ....有没有理由我不能在抽象类中重载构造函数?
由于
答案 0 :(得分:3)
VB中没有“抽象”。如果你的意思是c#意义上的抽象(用VB语言中的MustInherit),那么你需要在子类中定义两个构造函数,因为构造函数不是继承的。
示例:
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
答案 1 :(得分:0)
如果你的第二个构造函数在子类中,它必须调用基类中的构造函数。
Public Sub New()
MyBase.New("123", "456")
End Sub