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


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

Если процедура имеет параметр ParamArray (Visual Basic), то нельзя определить перегруженную версию, принимающую одномерный массив для массива параметров.Дополнительные сведения содержатся в разделе "Неявные перегрузки для параметра ParamArray" в Вопросы, связанные с перегрузкой процедур (Visual Basic).

Чтобы перегрузить процедуру, принимающую переменное число параметров

  1. Убедитесь, что использование перегруженных версий более уместно, чем использование параметра ParamArray.См. раздел "Перегрузка и массив параметров" в Вопросы, связанные с перегрузкой процедур (Visual Basic).

  2. Определите, какое число предоставленных значений должна принимать процедура в переменной части списка параметров.Это может включать случай отсутствия значений и может включать случай одномерного массива.

  3. Для каждого допустимого числа предоставленных значений напишите Sub или Function инструкцию объявления, определяющую соответствующий список параметров.Не стоит использовать ни ключевое слово Optional, ни ParamArray в данной перегруженной версии.

  4. В каждом объявлении ключевому слову Sub или Function должно предшествовать ключевое слово Overloads (Visual Basic).

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

  6. Завершите выполнение каждой процедуры оператором End Sub или End Function .

Пример

В следующем примере показана процедура, определенная с параметром ParamArray (Visual Basic), и эквивалентные перегруженные процедуры.

Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

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

' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

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

Компиляция кода

Поскольку процедура с параметром ParamArray эквивалентна набору перегруженных версий, нельзя перегрузить такую процедуру со списком параметров, соответствующим любому списку параметров из этих неявных перегрузок.Дополнительные сведения см. в разделе Вопросы, связанные с перегрузкой процедур (Visual Basic).

Безопасность

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

См. также

Задачи

Устранение неполадок в процедурах (Visual Basic)

Практическое руководство. Определение различных версий процедуры (Visual Basic)

Практическое руководство. Вызов перегруженной процедуры (Visual Basic)

Практическое руководство. Перегрузка процедуры, которая принимает один необязательный параметр (Visual Basic)

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

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

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

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

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

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

Разрешение перегрузки (Visual Basic)