Matrici di parametri (Visual Basic)
In genere, non è possibile chiamare una routine con più argomenti rispetto a quelli specificati nella dichiarazione di routine. Quando è necessario un numero indefinito di argomenti, è possibile dichiarare una matrice di parametri, che consente a una routine di accettare una matrice di valori per un parametro. Non è necessario conoscere il numero di elementi nella matrice di parametri quando si definisce la routine. Le dimensioni della matrice sono determinate singolarmente da ogni chiamata alla routine.
Dichiarazione dell'oggetto ParamArray
Usare la parola chiave ParamArray per indicare una matrice di parametri nell'elenco dei parametri. Si applicano le seguenti regole:
Una routine può definire una sola matrice di parametri e deve essere l'ultimo parametro nella definizione della routine.
La matrice di parametri devono essere passate per valore. Le procedure per la programmazione consigliano di includere in modo esplicito la parola chiave ByVal nella definizione della routine.
La matrice di parametri è automaticamente facoltativa. Il valore predefinito è una matrice unidimensionale vuota del tipo di elemento della matrice di parametri.
Tutti i parametri che precedono la matrice di parametri devono essere obbligatori. La matrice di parametri deve essere l'unico parametro facoltativo.
Chiamata di un oggetto ParamArray
Quando si chiama una routine che definisce una matrice di parametri, è possibile specificare l'argomento in uno dei modi seguenti:
Nothing, ovvero è possibile omettere l'argomento ParamArray. In questo caso, alla routine viene passata una matrice vuota. Se si passa in modo esplicito la parola chiave Nothing, alla routine viene passata una matrice Null che può generare un'eccezione NullReferenceException se la routine chiamata non verifica la presenza di questa condizione.
Elenco di un numero arbitrario di argomenti, separati da virgole. Il tipo di dati di ogni argomento deve essere convertibile in modo implicito nel tipo di elemento
ParamArray
.Matrice con lo stesso tipo di elemento del tipo di elemento della matrice di parametri.
In tutti i casi, il codice all'interno della routine considera la matrice di parametri come matrice unidimensionale con elementi dello stesso tipo di dati del tipo di dati ParamArray
.
Importante
Ogni volta che si gestisce una matrice che può avere dimensioni indefinitamente grandi, esiste il rischio di sovraccaricare alcune funzionalità interne dell'applicazione. Se si accetta una matrice di parametri, è necessario verificare le dimensioni della matrice passata dal codice chiamante. Adottare le misure appropriate se è troppo grande per l'applicazione. Per altre informazioni, vedere Matrici.
Esempio
L'esempio seguente definisce e chiama la funzione calcSum
. Il modificatore ParamArray
per il parametro args
consente alla funzione di accettare un numero variabile di argomenti.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
Nell'esempio seguente viene definita una routine con una matrice di parametri e vengono restituiti i valori di tutti gli elementi della matrice passati alla matrice di parametri.
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
' Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine("Score " & i & ": " & scores(i))
Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)