2010-11-19 8 views
1

J'ai une classe abstraite dans vb.net avec deux sous-classes. Dans la classe abstraite, j'ai un constuctor qui ressemble à ceci:Constructeur surchargé dans la classe abstraite dans vb.NET

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

Je voudrais créer un deuxième constructeur qui ne prend pas d'arguments et initialisera uniquement les args aux valeurs par défaut. Il ressemblerait à ceci:

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

Lorsque je tente de créer une nouvelle sous-classe en utilisant le deuxième constructeur le compilateur se plaint que je manque deux args au constructeur .... Y at-il une raison que je ne peux pas surcharger le constructeur dans la classe abstraite?

Merci

+0

Pouvez-vous publier tout votre code de cours? À votre santé. –

Répondre

3

Il n'y a pas "abstrait" dans VB. Si vous voulez dire abstrait dans le sens C# (MustInherit dans le langage VB), alors vous devez définir les deux constructeurs dans vos sous-classes, car les constructeurs ne sont pas hérités.

Exemple:

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

Résumé est un terme informatique. –

+0

SubClass n'a pas besoin d'avoir les deux constructeurs juste parce que sa classe de base a les deux. La seule règle est qu'elle appelle un constructeur sur la classe de base. –

+0

Bien sûr. Cependant, l'op demandé d'utiliser deux ctors. –

0

Si votre deuxième constructeur est dans la sous-classe, il doit appeler le constructeur dans la classe de base.

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