Passaggio di argomenti in base alla posizione e al nome (Visual Basic)
Quando si chiama una routine Sub
o Function
, è possibile passare argomenti in base alla posizione, nell'ordine in cui vengono visualizzati nella definizione della routine, oppure è possibile passarli in base al nome, senza considerare la posizione.
Quando si passa un argomento in base al nome, si specifica il nome dichiarato dell'argomento seguito da due punti e un segno di uguale (:=
), seguito dal valore dell'argomento. È possibile specificare argomenti denominati in qualsiasi ordine.
Ad esempio, la routine Sub
seguente accetta tre argomenti:
Public Class StudentInfo
Shared Sub Display(name As String,
Optional age As Short = 0,
Optional birth As Date = #1/1/2000#)
Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
End Sub
End Class
Quando si chiama questa routine, è possibile specificare gli argomenti in base alla posizione, in base al nome o usando una combinazione di entrambi.
Passaggio di argomenti in base alla posizione
È possibile chiamare il metodo Display
con i relativi argomenti passati in base alla posizione e delimitati da virgole, come illustrato nell'esempio seguente:
StudentInfo.Display("Mary", 19, #9/21/1998#)
Se si omette un argomento facoltativo in un elenco di argomenti posizionali, è necessario mantenerne la posizione con una virgola. Nell'esempio seguente viene chiamato il metodo Display
senza l'argomento age
:
StudentInfo.Display("Mary",, #9/21/1998#)
Passaggio di argomenti in base al nome
In alternativa, è possibile chiamare Display
con gli argomenti passati in base al nome e delimitati da virgole, come illustrato nell'esempio seguente:
StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")
Il passaggio di argomenti in base al nome in questo modo è particolarmente utile quando si chiama una routine con più argomenti facoltativi. Se si specificano argomenti in base al nome, non è necessario usare virgole consecutive per indicare gli argomenti posizionali mancanti. Il passaggio di argomenti in base al nome consente inoltre di tenere più facilmente sotto controllo gli argomenti passati e gli argomenti omessi.
Combinazione di argomenti in base alla posizione e al nome
È possibile specificare argomenti sia in base alla posizione che in base al nome in una singola chiamata di routine, come illustrato nell'esempio seguente:
StudentInfo.Display("Mary", birth:=#9/21/1998#)
Nell'esempio precedente non è necessaria alcuna virgola aggiuntiva per mantenere la posizione dell'argomento age
omesso, poiché birth
viene passato in base al nome.
Nelle versioni di Visual Basic precedenti alla versione 15.5, quando si specificano argomenti secondo una combinazione di posizione e nome, gli argomenti posizionali devono essere tutti specificati per primi. Dopo aver specificato un argomento in base al nome, tutti gli argomenti rimanenti devono essere passati in base al nome. Ad esempio, la chiamata seguente al metodo Display
visualizza l'errore del compilatore BC30241: È previsto un argomento denominato.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
A partire da Visual Basic 15.5, gli argomenti posizionali possono seguire argomenti denominati se gli argomenti posizionali finali si trovano nella posizione corretta. In Visual Basic 15.5 la chiamata precedente al metodo Display
viene compilata correttamente e non genera più l'errore del compilatore BC30241.
Questa possibilità di combinare e associare argomenti denominati e posizionali in qualsiasi ordine è particolarmente utile quando si vuole usare un argomento denominato per rendere il codice più leggibile. Ad esempio, il costruttore di classe Person
seguente richiede due argomenti di tipo Person
, entrambi i quali possono essere Nothing
.
Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)
L'uso di argomenti denominati e posizionali misti consente di rendere chiara la finalità del codice quando il valore degli argomenti father
e mother
è Nothing
:
Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)
Per far seguire argomenti denominati agli argomenti posizionali, è necessario aggiungere l'elemento seguente al file di progetto Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Per altre informazioni, vedere Impostazione della versione del linguaggio visual Basic.
Restrizioni per il passaggio di argomenti in base al nome
Non è possibile passare argomenti in base al nome per evitare di immettere argomenti obbligatori. È possibile omettere solo gli argomenti facoltativi.
Non è possibile passare una matrice di parametri in base al nome. Questo perché quando si chiama la routine, si fornisce un numero indefinito di argomenti delimitati da virgole per la matrice di parametri e il compilatore non può associare più argomenti con lo stesso nome.