Partilhar via


Matrizes de parâmetros (Visual Basic)

Normalmente, não é possível chamar um procedimento com mais argumentos do que a declaração de procedimento especifica. Quando você precisa de um número indefinido de argumentos, você pode declarar uma matriz de parâmetros, que permite que um procedimento aceite uma matriz de valores para um parâmetro. Não é necessário saber o número de elementos na matriz de parâmetros ao definir o procedimento. O tamanho da matriz é determinado individualmente por cada chamada para o procedimento.

Declarando um ParamArray

Use a palavra-chave ParamArray para indicar uma matriz de parâmetros na lista de parâmetros. Aplicam-se as seguintes regras:

  • Um procedimento pode definir apenas uma matriz de parâmetros, e deve ser o último parâmetro na definição do procedimento.

  • A matriz de parâmetros deve ser passada por valor. É uma boa prática de programação incluir explicitamente a palavra-chave ByVal na definição do procedimento.

  • A matriz de parâmetros é automaticamente opcional. Seu valor padrão é uma matriz unidimensional vazia do tipo de elemento da matriz de parâmetros.

  • Todos os parâmetros que precedem a matriz de parâmetros devem ser necessários. A matriz de parâmetros deve ser o único parâmetro opcional.

Chamando um ParamArray

Ao chamar um procedimento que define uma matriz de parâmetros, você pode fornecer o argumento de qualquer uma das seguintes maneiras:

  • Nada — ou seja, você pode omitir o argumento ParamArray . Nesse caso, uma matriz vazia é passada para o procedimento. Se você passar explicitamente a palavra-chave Nothing , uma matriz nula será passada para o procedimento e poderá resultar em uma NullReferenceException se o procedimento chamado não verificar essa condição.

  • Uma lista de um número arbitrário de argumentos, separados por vírgulas. O tipo de dados de cada argumento deve ser implicitamente conversível para o ParamArray tipo de elemento.

  • Uma matriz com o mesmo tipo de elemento que o tipo de elemento da matriz de parâmetros.

Em todos os casos, o código dentro do procedimento trata a matriz de parâmetros como uma matriz unidimensional com elementos do mesmo tipo de dados que o ParamArray tipo de dados.

Importante

Sempre que você lida com um array que pode ser indefinidamente grande, há um risco de exceder alguma capacidade interna do seu aplicativo. Se você aceitar uma matriz de parâmetros, deverá testar o tamanho da matriz que o código de chamada passou para ela. Tome as medidas apropriadas se for demasiado grande para a sua aplicação. Para obter mais informações, consulte Matrizes.

Exemplo

O exemplo a seguir define e chama a função calcSum. O ParamArray modificador para o parâmetro args permite que a função aceite um número variável de argumentos.

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

O exemplo a seguir define um procedimento com uma matriz de parâmetros e produz os valores de todos os elementos da matriz passados para a matriz de parâmetros.

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)

Consulte também