Si tratta di argomenti un tantino confusivi...
Iniziamo con una classe incredibilmente semplice...
Module Module1 Sub Main() Dim miaClasse As New Classe miaClasse.metodo() End Sub End Module Class Classe Sub metodo() Console.WriteLine("Io sono la classe base") Console.ReadKey() End Sub End ClassOutput:
Io sono la classe base
Adesso creiamo una classe derivata:
Sub Main()
Dim miaClasse As New Classe
miaClasse.metodo()
End Sub
End Module
Class Classe
Sub metodo()
Console.WriteLine("Io sono la classe base")
Console.ReadKey()
End Sub
End Class
Class Derivata
Inherits Classe
Sub metodo()
Console.WriteLine("Io sono la classe derivata")
End Sub
End Class
Nel metodo della classe derivata ottengo una segnalazione di errore:"sub 'metodo' nasconde un membro che supporta l'overload dichiarato nella class base 'Classe'. Per eseguire l'overload del metodo di base, quest'ultimo deve essere essere dichiarato 'Overloads' "
Che significa tutto questo?
Significa probabilmente che posso eseguire l'overload del metodo 'metodo', ossia avere due metodi con lo stesso nome ma con diversi parametri, il che significa la possibilità di usare uno stesso metodo con diversi parametri.
Per fare questo, devo dichiarare questo metodo della classe derivata "overloads".
Proviamo...
Module Module1 Sub Main() Dim miaClasse As New Classe miaClasse.metodo() Dim miaDerivata As New Derivata miaDerivata.metodo() End Sub End Module Class Classe Sub metodo() Console.WriteLine("Io sono la classe base") Console.ReadKey() End Sub End Class Class Derivata Inherits Classe Overloads Sub metodo() Console.WriteLine("Io sono la classe derivata") Console.ReadKey() End Sub End ClassHo semplicemente dichiarato Overloads il metodo della classe derivata, senza modificarne i parametri.
Non mi pare che la cosa abbia poi molto senso.
L'output è il seguente:
Io sono la classe base Io sono la classe derivata
In pratica, quando istanzio la classe base, viene eseguito il metodo della classe base, mentre quanto istanzio la classe derivata viene eseguito il metodo della classe derivata. E' come se usassi l'override, in cui il metodo della classe derivata sostituisce il metodo della classe base...
Proviamo a modificare i parametri...
Module Module1 Sub Main() Dim miaClasse As New Classe miaClasse.metodo() Dim miaDerivata As New Derivata miaDerivata.metodo() End Sub End Module Class Classe Sub metodo() Console.WriteLine("Io sono la classe base") Console.ReadKey() End Sub End Class Class Derivata Inherits Classe Overloads Sub metodo(ByVal parametro As String) Console.WriteLine("Io sono la classe derivata") Console.ReadKey() End Sub End ClassEcco, ora ho fatto un vero overload, ossia nella classe derivata avrò due metodi, uno senza parametri e uno con un parametro di tipo String.
E se istanzio la classe derivata eseguendone il metodo senza parametri, mi verrà eseguito il metodo della classe base:
Io sono la classe base Io sono la classe baseInvece adesso provo ad eseguire, dopo aver istanziato la classe derivata, il metodo con parametro di tipo String e vediamo:
Sub Main() Dim miaClasse As New Classe miaClasse.metodo() Dim miaDerivata As New Derivata miaDerivata.metodo("Ciao ciccio") End SubEcco l'output:
Io sono la classe base Io sono la classe derivataPerfetto!
Con l'Overload posso avere un metodo da usare in modo versatile, con numero e tipo diverso di parametri.
Ovviamente posso overloadare un metodo anche nell'ambito della stessa classe:
Module Module1 Sub Main() Dim miaClasse As New Classe miaClasse.metodo() miaClasse.metodo(123) miaClasse.metodo(345, "Fesso") End Sub End Module Class Classe Sub metodo() Console.WriteLine("Io sono il metodo senza parametri") Console.ReadKey() End Sub Sub metodo(ByVal parametro As Integer) Console.WriteLine("Io sono il metodo con parametro") Console.ReadKey() End Sub Sub metodo(ByVal parametro As Integer, ByVal parametro2 As String) Console.WriteLine("Io sono il metodo con due parametri") Console.ReadKey() End Sub End ClassOutput:
Io sono il metodo senza parametri Io sono il metodo con parametro Io sono il metodo con due parametriEcco l'overloading!
Nessun commento:
Posta un commento