Поделиться через


Массивы параметров (Visual Basic)

Обычно в вызове процедуры не может быть больше аргументов, чем в ее объявлении. Если точное число аргументов, которые предстоит использовать, неизвестно, то можно объявить массив параметров, который позволяет процедуре принять в качестве параметра массив значений. При определении процедуры необязательно указывать количество элементов в массиве параметров. Размер массива определяется заново при каждом вызове процедуры.

Объявление ParamArray

Ключевое слово ParamArray (Visual Basic) используется для обозначения массива параметров в списке параметров. Действуют следующие правила.

  • Процедура может определять только один массив параметров, и он должен быть последним параметром в определении процедуры.

  • Массив параметров должен передаваться по значению. Рекомендуется включать явным образом ключевое слово ByVal (Visual Basic) в определение процедуры.

  • Массив параметров всегда является необязательным. По умолчанию его значением является пустой одномерный массив с заданным для массива параметров типом элемента массива.

  • Все параметры, предшествующие в списке массиву параметров, должны быть обязательными. Массив параметров должен быть единственным опциональным параметром.

Вызов ParamArray

При вызове процедуры, определяющей массив параметров, можно указать аргумент одним из следующих способов:

  • Ничего, т.е. опустить аргумент ParamArray (Visual Basic). В этом случае процедуре передается пустой массив. Такой же результат дает использование ключевого слова Nothing (Visual Basic).

  • Список из неопределенного числа аргументов, разделенных запятыми. Тип данных каждого из аргументов должен неявным образом преобразовываться в тип элемента ParamArray.

  • Массив с элементами того же типа, что и в массиве параметров.

Во всех случаях код в процедуре должен обрабатывать массив параметров как одномерный массив, каждый элемент которого имеет тот же тип данных, что и ParamArray.

Примечание о безопасностиПримечание по безопасности

При работе с неограниченно большим массивом есть риск переполнения некоторой внутренней емкости приложения.Если принимается массив параметров, то следует проверить размер массива, переданного вызывающим кодом.Предпринять соответствующие действия, если он слишком велик для приложения.Дополнительные сведения см. в разделе Массивы в Visual Basic.

Пример

В следующем примере определяется и вызывается функция calcSum. Модификатор ParamArray для параметра args позволяет функции принять переменное число аргументов.

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

Следующий пример определяет процедуру с массивом параметров и выводит значения всех элементов массива, переданных массиву параметров.

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)

См. также

Ссылки

Optional (Visual Basic)

UBound

Основные понятия

Процедуры в Visual Basic

Параметры и аргументы процедуры (Visual Basic)

Передача аргументов по значению и по ссылке (Visual Basic)

Передача аргументов по позиции и по имени (Visual Basic)

Необязательные параметры (Visual Basic)

Перегрузка процедур (Visual Basic)

Другие ресурсы

Массивы в Visual Basic