2010-11-19 63 views
1

我在vb.net中有兩個子類的抽象類。在抽象類我有一個constuctor,看起來像這樣:vb.NET中抽象類的重載構造函數

Public Sub New(arg1 as String, arg2 as String) 
    Me.arg1 = arg1 
    Me.arg2 = arg2 
End Sub 

我想創建一個不帶任何參數,只是初始化參數傳遞給默認值的第二個構造函數。它應該是這樣的:

Public Sub New() 
    Me.arg1 = "123" 
    Me.arg2 = "456" 
End Sub 

當我嘗試使用第二個構造函數編譯器會抱怨我就是缺少有兩個參數的構造函數來創建一個新的子類....是否有一個原因,我不能重載抽象類中的構造函數?

謝謝

+0

你能發佈你所有的班級代碼嗎?乾杯。 – 2010-11-19 22:00:00

回答

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

摘要是計算機科學術語。 – 2010-11-19 22:40:40

+0

子類不需要同時擁有這兩個構造函數,因爲它的基類同時具有這兩個構造函數。唯一的規則是它調用基類的構造函數。 – 2010-11-19 22:42:49

+0

當然。但是,該操作詢問了有關使用兩臺計算機的問題。 – 2010-11-24 19:11:05

0

如果你的第二個構造函數是在子類中,它必須調用基類的構造函數。

Public Sub New() 
    MyBase.New("123", "456") 
End Sub