Condividi tramite


Matrici di parametri (Visual Basic)

In genere, non è possibile chiamare una routine con più argomenti rispetto alla dichiarazione di routine specificata. Quando è necessario un numero illimitato 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 di un 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 deve essere passata per valore. È buona norma di programmazione includere in modo esplicito la parola chiave ByVal nella definizione della procedura.

  • La matrice di parametri è facoltativa automaticamente. 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.

Chiamare un ParamArray

Quando si chiama una routine che definisce una matrice di parametri, è possibile specificare l'argomento in uno dei modi seguenti:

  • Niente, ovvero è possibile omettere l'argomento ParamArray . In questo caso, alla procedura viene passata una matrice vuota. Se si passa in modo esplicito la parola chiave Nothing , una matrice Null viene passata alla routine e 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 ciascun argomento deve essere convertibile in modo implicito al 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 ParamArray tipo di dati.

Importante

Ogni volta che si gestisce una matrice che può essere a tempo indefinito di grandi dimensioni, esiste il rischio di sovraccaricare alcune capacità 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 la tua applicazione. Per altre informazioni, vedere Matrici.

Esempio

L'esempio seguente definisce e chiama la funzione calcSum. Il ParamArray modificatore 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)

Vedere anche