Condividi tramite


Parametri facoltativi (Visual Basic)

È possibile specificare che un parametro di routine è facoltativo e non è necessario specificare alcun argomento quando viene chiamata la routine. I parametri facoltativi sono indicati dalla Optional parola chiave nella definizione della routine. Si applicano le seguenti regole:

  • Ogni parametro facoltativo nella definizione della routine deve specificare un valore predefinito.

  • Il valore predefinito per un parametro facoltativo deve essere un'espressione costante.

  • Ogni parametro che segue un parametro facoltativo nella definizione della procedura deve essere facoltativo.

La sintassi seguente illustra una dichiarazione di routine con un parametro facoltativo:

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

Chiamata di routine con parametri facoltativi

Quando si chiama una routine con un parametro facoltativo, è possibile scegliere se specificare l'argomento . Se non lo fai, la procedura utilizza il valore predefinito dichiarato per quel parametro.

Quando si omette uno o più argomenti facoltativi nell'elenco di argomenti, si usano virgole successive per contrassegnare le posizioni. La chiamata di esempio seguente fornisce il primo e il quarto argomento ma non il secondo o il terzo:

Sub name(argument 1, , , argument 4)  

Nell'esempio seguente vengono effettuate diverse chiamate alla MsgBox funzione . MsgBox ha un parametro obbligatorio e due parametri facoltativi.

La prima chiamata a MsgBox fornisce tutti e tre gli argomenti nell'ordine in cui MsgBox vengono definiti. La seconda chiamata fornisce solo l'argomento obbligatorio. La terza e la quarta chiamata forniscono il primo e il terzo argomento. La terza chiamata esegue questa operazione in base alla posizione e la quarta chiamata lo esegue in base al nome.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

Determinare se è presente un argomento facoltativo

Una routine non è in grado di rilevare in fase di esecuzione se un determinato argomento è stato omesso o se il codice chiamante ha fornito in modo esplicito il valore predefinito. Se è necessario fare questa distinzione, è possibile impostare un valore improbabile come predefinito. La procedura seguente definisce il parametro officefacoltativo e verifica il relativo valore predefinito, QJZ, per verificare se è stato omesso nella chiamata:

Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
    If office = "QJZ" Then
        Debug.WriteLine("office not supplied -- using Headquarters")
        office = "Headquarters"
    End If
    ' Insert code to notify headquarters or specified office.
End Sub

Se il parametro facoltativo è un tipo di riferimento, ad esempio , Stringè possibile usare Nothing come valore predefinito, purché questo non sia un valore previsto per l'argomento.

Parametri facoltativi e sovraccarico

Un altro modo per definire una routine con parametri facoltativi consiste nell'usare l'overload. Se si dispone di un parametro facoltativo, è possibile definire due versioni di overload della procedura, una che accetta il parametro e una senza di essa. Questo approccio diventa più complicato man mano che aumenta il numero di parametri facoltativi. Tuttavia, il suo vantaggio è che è possibile essere assolutamente sicuri se il programma chiamante ha fornito ogni argomento facoltativo.

Vedere anche