Overloading

L’overloading, letteralmente sovraccaricamento, è la possibilità di definire più versioni di una procedura, utilizzando lo stesso nome ma un numero e/o un tipo diverso di argomenti: in fase di esecuzione, sulla base degli argomenti effettivamente passati alla routine, verrà richiamata la procedura corretta; nella Guida in linea di Visual Basic sono specificati con precisione i passi che il compilatore esegue per risolvere l’overloading, cioè per determinare qual è la routine corretta da richiamare. Cerchiamo con un esempio di capire come funziona l’overloading:

Public Class Test
‘…
Public Sub Prova(ByVal Nome As String)
MsgBox(“Il nome specificato è: ” & Nome & “.”)
End Sub

Public Sub Prova(ByVal Numero As Integer)
MsgBox(“Il numero specificato è: ” & Numero & “.”)
End Sub
End Class

Le due definizioni della Sub Prova differiscono per il tipo dell’argomento: String nel primo caso, Integer nel secondo. Se ora creiamo un’istanza della classe e proviamo a richiamare la routine Prova, otteniamo:

Dim T As New Test()
T.Prova(“Marco”)  ’Visualizza il messaggio “Il nome specificato è: Marco.”
T.Prova(104)   ’Visualizza il messaggio “Il numero specificato è: 104.”

Per indicare che una routine sfrutta l’overloading, ovvero che sono presenti più definizioni per la stessa, si dovrebbe specificare la parola chiave Overloads, nel modo seguente:

Public Overloads Sub Prova(ByVal Nome As String)
Public Overloads Sub Prova(ByVal Numero As Integer)

Tuttavia, il parametro Overloads è predefinito, quindi anche omettendolo (come abbiamo fatto nella classe di esempio sopra riportata), Visual Basic sarà in grado di gestire correttamente l’overloading.
Un utilizzo classico dell’overloading è nella definizione di un costruttore per una classe (abbiamo parlato del costruttore quando abbiamo introdotto il concetto di classe. Supponiamo di avere una classe Giocatore, che, tra le altre cose, contiene il nome del giocatore: si vorrebbe dare la possibilità di definire il nome del giocatore nel momento in cui si crea un’istanza della classe; se il nome non viene specificato, dovrebbe essere impostato su “Anonimo”. E’ possibile realizzare quanto detto con l’overloading del costruttore:

Public Class Giocatore
Private NomeGiocatore As String

Sub New()
NomeGiocatore = “Anonimo”
End Sub

Sub New(ByVal sNome As String)
NomeGiocatore = sNome
End Sub

‘…
End Class

Supponiamo inoltre di avere una Property Nome che restituisce il nome del giocatore. Stando così le cose, creando un’istanza della classe otterremo, ad esempio:

Dim G As New Giocatore()   ’Non si specifica il nome del giocatore: verrà richiamato il costruttore “New()”.
MsgBox(G.Nome) ‘Visualizza “Anonimo”.

Dim G2 As New Giocatore(“Marco”)   ’Si specifica il nome del giocatore: verrà richiamato il costruttore   ’”New(ByVal sNome As String)”.
MsgBox(G2.Nome)  ’Visualizza “Marco”.

Notiamo che, nel caso di overloading del costruttore, non si deve mai utilizzare la parola chiave Overloads, altrimenti si ottiene un messaggio di errore.

Ora che abbiamo analizzato le principali novità di Visual Basic .NET, è finalmente possibile cominciare ad utilizzare nella pratica questo linguaggio: nella prossima Lezione verrà introdotto brevemente il nuovo ambiente di sviluppo di Visual Studio.

Both comments and pings are currently closed.

Comments are closed.