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


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

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

Перегрузка процедуры, которая принимает переменное число параметров

  1. Убедитесь, что процедура и логика вызова кода получают больше преимуществ от перегруженных версий, чем от параметра. См. "Перегрузки и ParamArrays" в рекомендациях по перегрузке процедур.

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

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

  4. В каждом объявлении перед каждым ключевым словом Sub или Function необходимо использовать ключевое слово Перегрузки.

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

  6. Завершите каждую процедуру инструкцией 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 параметром эквивалентна набору перегруженных версий, вы не можете перегрузить такую процедуру со списком параметров, соответствующим любой из этих неявных перегрузк. Дополнительные сведения см. в разделе "Рекомендации в процедурах перегрузки".

Безопасность .NET Framework

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

См. также