Condividi tramite


Passaggio di argomenti per posizione e per nome (Visual Basic)

Quando si chiama una Sub routine o Function , è possibile passare argomenti per posizione , nell'ordine in cui vengono visualizzati nella definizione della routine , oppure è possibile passarli per nome, senza considerare la posizione.

Quando si passa un argomento per nome, si specifica il nome dichiarato dell'argomento seguito da due punti e un segno di uguale (:=), seguito dal valore dell'argomento. È possibile fornire argomenti denominati in qualsiasi ordine.

Ad esempio, la procedura seguente Sub 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 procedura, è possibile specificare gli argomenti in base alla posizione, in base al nome o usando una combinazione di entrambi.

Passaggio di argomenti per posizione

È possibile chiamare il Display metodo con i relativi argomenti passati per 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 posizionale, è necessario conservarne la posizione con una virgola. Nell'esempio seguente, il metodo Display viene chiamato senza l'argomento age.

StudentInfo.Display("Mary",, #9/21/1998#)

Passaggio di argomenti per nome

In alternativa, è possibile chiamare Display con gli argomenti passati per nome, delimitati anche da virgole, come illustrato nell'esempio seguente:

StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")

Il passaggio di argomenti per nome in questo modo è particolarmente utile quando si chiama una procedura che ha più di un argomento facoltativo. Se si specificano argomenti per nome, non è necessario usare virgole consecutive per indicare gli argomenti posizionali mancanti. Il passaggio di argomenti in base al nome semplifica anche la verifica degli argomenti che si stanno passando e di quali argomenti si sta omettendo.

Combinazione di argomenti per posizione e per nome

È possibile specificare argomenti sia per posizione che per 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 contenere il posto dell'argomento omesso age , poiché birth viene passato per nome.

Nelle versioni di Visual Basic precedenti alla 15.5, quando si specificano argomenti in base a una combinazione di posizione e nome, gli argomenti posizionali devono venire tutti per primi. Dopo aver specificato un argomento in base al nome, tutti gli argomenti rimanenti devono essere passati per nome. Ad esempio, la chiamata seguente al metodo Display visualizza l'errore del compilatore BC30241: Argomento denominato previsto.

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. Se compilato in Visual Basic 15.5, la chiamata precedente al metodo viene compilata correttamente e non genera più l'errore del Display 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 seguente Person 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 seguire gli argomenti posizionali con argomenti denominati, è 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 relative all'inserimento di argomenti in base al nome

Non puoi passare argomenti per nome per evitare di inserire argomenti obbligatori. È possibile omettere solo gli argomenti facoltativi.

Non è possibile passare una matrice di parametri in base al nome. Ciò avviene perché quando si chiama la routine, si specifica un numero indefinito di argomenti delimitati da virgole per la matrice di parametri e il compilatore non può associare più di un argomento a un singolo nome.

Vedere anche