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

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

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

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

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

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

  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

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

См. также