Qui c'è praticamente un overloading dei costruttori nell'ambito della stessa classe.
Mi rifaccio un altro esempio.
Module Module1 Sub Main() Dim miaClasse As New Classe Dim secondaClasse As New Classe(2) Dim terzaClasse As New Classe(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
Analogamente a quanto accade, se ricordo bene, nel C++, il costruttore senza parametri si considera automaticamente esistente se è l'unico, ossia se non viene "overloadato", mentre se c'è un altro costruttore con parametri esso deve essere dichiarato esplicitamente.
Ho fatto un po' di prove...
Module Module1
Sub Main()
Dim miaClasse As New Classe
Dim secondaClasse As New Classe(2)
Dim terzaClasse As New Classe(2, "ciao")
End Sub
End Module
Class 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
End Class
Ecco: in questo caso ho tolto il costruttore di default, quello senza parametri, e ottengo una segnalazione di errore già in fase di scrittura del codice: "Errore 1 Risoluzione dell'overload non riuscita perché nessun 'New' accessibile accetta questo numero di argomenti."Adesso elimino gli altri costruttori (e ovviamente anche le istanziazioni della classe che ne fanno uso).
Module Module1 Sub Main() Dim miaClasse As New Classe End Sub End Module Class Classe End ClassSi tratta della classe più fessa del mondo, ma quello che mi interessa è il concetto: adesso non ottengo più alcuna segnalazione di errore, perchè in assenza di overloading dei costruttori il costruttore di default, quello senza parametri, viene dato per sottinteso e quindi l'istanziazione della classe con quel costruttore mi viene riconosciute come lecita.
Nessun commento:
Posta un commento