Практическое руководство. Перегрузка процедуры, принимающей неопределенное число параметров
Обновлен: Ноябрь 2007
Если процедура имеет параметр ParamArray, то нельзя определить перегруженную версию, принимающую одномерный массив для массива параметров. Дополнительные сведения содержатся в разделе « Неявные перегрузки для параметра ParamArray" в Вопросы, связанные с перегрузкой процедур.
Чтобы перегрузить процедуру, принимающую переменное число параметров
Убедитесь, что использование перегруженных версий более уместно, чем использование параметра ParamArray. См. раздел "Перегрузка и массив параметров" в Вопросы, связанные с перегрузкой процедур.
Определите, какое число предоставленных значений должна принимать процедура в переменной части списка параметров. Это может включать случай отсутствия значений и может включать случай одномерного массива.
Для каждого допустимого числа предоставленных значений напишите Sub или Function инструкцию объявления, определяющую соответствующий список параметров. Не стоит использовать ни ключевое слово Optional, ни ParamArray в данной перегруженной версии.
В каждом объявлении ключевому слову Sub или Function должно предшествовать ключевое слово Overloads.
После каждого объявления напишите код процедуры, который должен выполняться, когда вызывающий код предоставит значения, соответствующие элементам списка параметров в объявлении.
Завершите выполнение каждой процедуры оператором End Sub или End Function .
Пример
В следующем примере показана процедура, определенная с параметром ParamArray, и эквивалентные перегруженные процедуры.
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 эквивалентна набору перегруженных версий, нельзя перегрузить такую процедуру со списком параметров, соответствующим любому списку параметров из этих неявных перегрузок. Дополнительные сведения см. в разделе Вопросы, связанные с перегрузкой процедур.
Безопасность
При работе с неограниченно большим массивом есть риск переполнения некоторой внутренней емкости приложения. Если принимается массив параметров, то следует проверить его длину и предпринять соответствующие действия в случае, если она слишком велика для приложения.
См. также
Задачи
Устранение неполадок в процедурах
Практическое руководство. Определение различных версий процедуры
Практическое руководство. Вызов перегруженной процедуры
Практическое руководство. Перегрузка процедуры, которая принимает один опциональный параметр