Qui ho un'evidenza differente:
Module Module1
Sub Main()
Dim miaClasse As New Classe
Dim secondaClasse As New Classe(2)
Dim terzaClasse As New Classe(2, "ciao")
Dim miaDerivata As New Derivata
End Sub
End Module
Class Classe
Sub New()
Console.WriteLine("Costruttore senza parametri")
Console.ReadKey()
End Sub
Sub New(ByVal parametro As Integer)
Console.WriteLine("Costruttore con un parametro")
Console.ReadKey()
End Sub
Sub New(ByVal parametro As Integer, ByVal parametro2 As String)
Console.WriteLine("Costruttore con due parametri")
Console.ReadKey()
End Sub
End Class
Class Derivata
Inherits Classe
End Class
Se istanzio la classe derivata senza parametri, questa eredita il costruttore senza parametri della classe base.Infatti l'output mi mostra il risultato dell'istanziazione della classe base mediante i suoi tre costruttori, e successivamente il risultato dell'istanziazione della classe derivata mediante il costruttore senza parametri della classe base, che quindi è necessariamente ereditato:
Costruttore senza parametri Costruttore con un parametro Costruttore con due parametri Costruttore senza parametri
Proviamo adesso ad aggiungere l'istanziazione della classe derivata mediante i costruttori con parametri:
Module Module1
Sub Main()
Dim miaClasse As New Classe
Dim secondaClasse As New Classe(2)
Dim terzaClasse As New Classe(2, "ciao")
Dim miaDerivata As New Derivata
Dim secondaDerivata As New Derivata(2)
Dim terzaDerivata As New Derivata(2, "ciao")
End Sub
End Module
Class Classe
Sub New()
Console.WriteLine("Costruttore senza parametri")
Console.ReadKey()
End Sub
Sub New(ByVal parametro As Integer)
Console.WriteLine("Costruttore con un parametro")
Console.ReadKey()
End Sub
Sub New(ByVal parametro As Integer, ByVal parametro2 As String)
Console.WriteLine("Costruttore con due parametri")
Console.ReadKey()
End Sub
End Class
Class Derivata
Inherits Classe
End Class
Ecco: ottengo l'errore già in fase di scrittura del codice.Errore 1 Troppi argomenti per 'Public Sub New()'.
Errore 2 Troppi argomenti per 'Public Sub New()'.
Dunque la conclusione è che il costruttore senza parametri può essere ereditato, mentre i costruttori con parametri no.
Ma, come sospettavo, aggiungiamo i costruttori con parametri nel codice della classe derivata senza specificare il costruttore senza parametri, e ne vedremo delle belle:
Class Derivata
Inherits Classe
Sub New(ByVal parametro As Integer)
Console.WriteLine("Costruttore con un parametro")
Console.ReadKey()
End Sub
Sub New(ByVal parametro As Integer, ByVal parametro2 As String)
Console.WriteLine("Costruttore con due parametri")
Console.ReadKey()
End Sub
E istanziamo:
Dim miaDerivata As New Derivata
Dim secondaDerivata As New Derivata(2)
Dim terzaDerivata As New Derivata(2, "ciao")
Ottengo un errore nell'istanziare la classe derivata col costruttore senza parametri:Errore 1 Risoluzione dell'overload non riuscita perché nessun 'New' accessibile accetta questo numero di argomenti.
Conclusione:
Se non esistono costruttori con parametri nella classe derivata, il costruttore di default (senza parametri) viene ereditato, mentre se esistono costruttori con parametri nella classe derivata, il costruttore di default va specificato espressamente!



