JavascriptProva

mercoledì 31 luglio 2013

Overloading dei costruttori nell'ambito di una classe.

Avevo già ripassato la cosa qualche tempo fa

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 Class
Si 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