Delen via


Parametermatrices (Visual Basic)

Normaal gesproken kunt u geen procedure met meer argumenten aanroepen dan de proceduredeclaratie aangeeft. Wanneer u een onbeperkt aantal argumenten nodig hebt, kunt u een parametermatrix declareren, waardoor een procedure een matrix met waarden voor een parameter kan accepteren. U hoeft het aantal elementen in de parametermatrix niet te weten wanneer u de procedure definieert. De matrixgrootte wordt afzonderlijk bepaald door elke aanroep van de procedure.

Een ParamArray declareren

U gebruikt het trefwoord ParamArray om een parametermatrix in de parameterlijst aan te geven. De volgende regels zijn van toepassing:

  • Een procedure kan slechts één parametermatrix definiëren en moet de laatste parameter in de proceduredefinitie zijn.

  • De parametermatrix moet worden doorgegeven door een waarde. Het is een goede programmeerprocedure om het ByVal-trefwoord expliciet op te nemen in de proceduredefinitie.

  • De parametermatrix is automatisch optioneel. De standaardwaarde is een lege eendimensionale matrix van het elementtype van de parametermatrix.

  • Alle parameters voorafgaand aan de parametermatrix moeten vereist zijn. De parametermatrix moet de enige optionele parameter zijn.

Een ParamArray aanroepen

Wanneer u een procedure aanroept waarmee een parametermatrix wordt gedefinieerd, kunt u het argument op een van de volgende manieren opgeven:

  • Niets , dat wil gezegd, u kunt het argument ParamArray weglaten. In dit geval wordt een lege matrix doorgegeven aan de procedure. Als u het trefwoord Niets expliciet doorgeeft, wordt een null-matrix doorgegeven aan de procedure en kan dit resulteren in een NullReferenceException als de aangeroepen procedure niet controleert op deze voorwaarde.

  • Een lijst met een willekeurig aantal argumenten, gescheiden door komma's. Het gegevenstype van elk argument moet impliciet worden omgezet in het ParamArray elementtype.

  • Een matrix met hetzelfde elementtype als het elementtype van de parametermatrix.

In alle gevallen behandelt de code in de procedure de parametermatrix als een eendimensionale matrix met elementen van hetzelfde gegevenstype als het ParamArray gegevenstype.

Belangrijk

Wanneer u te maken krijgt met een matrix die voor onbepaalde tijd groot kan zijn, bestaat het risico dat een bepaalde interne capaciteit van uw toepassing wordt overschreden. Als u een parametermatrix accepteert, moet u testen op de grootte van de matrix die door de aanroepcode is doorgegeven. Voer de juiste stappen uit als deze te groot is voor uw toepassing. Zie Matrices voor meer informatie.

Opmerking

In het volgende voorbeeld wordt de functie calcSumgedefinieerd en aangeroepen. Met ParamArray de wijzigingsfunctie voor de parameter args kan de functie een variabel aantal argumenten accepteren.

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

Het volgende voorbeeld definieert een procedure met een parametermatrix en voert de waarden uit van alle matrixelementen die aan de parametermatrix worden doorgegeven.

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)

Zie ook