在vb.NET中的抽象类中重载的构造函数

时间:2010-11-19 21:54:13

标签: vb.net inheritance

我在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 ....有没有理由我不能在抽象类中重载构造函数?

由于

2 个答案:

答案 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