Le procedure possono avere più set di parametri, è possibile creare delle procedure con lo stesso nome ma con numero e tipo diverso di parametri (diversa segnature). Non basta cambiare il tipo di ritorno, ma occorre cambiare il tipo o il numero dei parametri. Parliamo in questo caso di "Overloading".
Quando viene eseguita una chiamata verso una procedura overloaded, il compilatore sceglie quella appropriata in base agli argomenti.
Module modOverloading
Sub Main()
Dim i1 As Integer = 10
Dim i2 As Integer = 12
Dim d1 As Double = 1.2
Dim d2 As Double = 5.3
Console.WriteLine(soma(i1, i2))
Console.WriteLine(soma(d1, d2))
End Sub
Function soma(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
Console.WriteLine("Sto eseguendo la somma di due interi")
Return Convert.ToInt32(num1+num2)
End Function
Function soma(ByVal num1 As Double, ByVal num2 As Double) As Double
Console.WriteLine("Sto eseguendo la somma di due double")
Return Convert.ToDouble(num1+num2)
End Function
End Module
Si possono creare delle procedure che accettano argomenti facoltativi.
La parola chiave da usare è "Optional", e quando la si usa occorre specificare il valore di default nel caso in cui alla funzione non venga passato alcun valore.
Optional [ByVal | ByRef] parametro As tipoDato = valoreDefault
Module modParametriFacoltativi
Sub Main()
Console.WriteLine(potenza(5,3))
Console.WriteLine(potenza(8))
End Sub
Function potenza (ByVal base As Integer, Optional ByVal esponente As Integer = 2) As Integer
Dim risultato As Integer = 1
Dim i As Integer = 1
For i = 1 To esponente
totale *= base
Next
Return totale
End Function
End Module
La funzione, se non si specifica il secondo parametro , calcola di default il quadrato dell'intero passato.