Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Если процедура имеет один или несколько необязательных параметров, нельзя определить перегруженную версию, соответствующую какой-либо из неявных перегрузок. Дополнительные сведения см. в разделе "Неявные перегрузки для необязательных параметров" в разделе "Рекомендации в процедурах перегрузки".
Один необязательный параметр
Перегрузка процедуры, которая принимает один необязательный параметр
SubНапишите инструкцию илиFunctionобъявление, которая включает необязательный параметр в списке параметров. Не используйте ключевоеOptionalслово в этой перегруженной версии.Предшествуйте ключевому слову
Subили ключевому словуFunctionключевым словом Перегрузки.Напишите код процедуры, который должен выполняться, когда вызывающий код предоставляет необязательный аргумент.
Завершите процедуру с помощью инструкции
End SubилиEnd Function, в зависимости от ситуации.Напишите второе объявление, идентичное первому, за исключением того, что оно не включает необязательный параметр в список параметров.
Напишите код процедуры, который должен выполняться, если вызывающий код не предоставляет необязательный аргумент. Завершите процедуру с помощью инструкции
End SubилиEnd Function, в зависимости от ситуации.В следующем примере показана процедура, определенная с необязательным параметром, эквивалентным набором двух перегруженных процедур, а также примерами как недопустимых, так и допустимых перегруженных версий.
Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)' The preceding definition is equivalent to the following two overloads. ' Overloads Sub q(ByVal b As Byte) ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)' Therefore, the following overload is not valid because the signature is already in use. ' Overloads Sub q(ByVal c As Byte, ByVal k As Long) ' The following overload uses a different signature and is valid. Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Несколько необязательных параметров
Для процедуры с несколькими необязательными параметрами обычно требуется более двух перегруженных версий. Например, если есть два необязательных параметра, и вызывающий код может предоставить или опустить каждый из них независимо друг от друга, вам потребуется четыре перегруженные версии, по одному для каждого из возможных сочетаний предоставленных аргументов.
По мере увеличения числа необязательных параметров сложность перегрузки увеличивается. Если некоторые сочетания предоставленных аргументов не допустимы, для необязательных параметров N требуется 2 ^ N перегруженных версий. В зависимости от характера процедуры, вы можете обнаружить, что ясность логики оправдывает дополнительные усилия по определению всех перегруженных версий.
Перегрузка процедуры, которая принимает несколько необязательных параметров
Определите, какие сочетания предоставленных необязательных аргументов допустимы для логики процедуры. Неприемлемое сочетание может возникнуть, если один необязательный параметр зависит от другого. Например, если один параметр принимает имя пользователя, а другой принимает возраст человека, сочетание аргументов, предоставляющих возраст, но пропуская имя неприемлемо.
Для каждого допустимого сочетания предоставленных необязательных аргументов напишите оператор
SubилиFunctionдля определения соответствующего списка параметров. Не используйте ключевоеOptionalслово.В каждом объявлении перед каждым ключевым словом
SubилиFunctionнеобходимо использовать ключевое слово Перегрузки.После каждого объявления напишите код процедуры, который должен выполняться, когда вызывающий код предоставляет список аргументов, соответствующий списку параметров этого объявления.
Завершите каждую процедуру инструкцией
End SubилиEnd Functionсоответствующим образом.
См. также
- процедуры
- Параметры процедуры и аргументы
- необязательные параметры
- массивы параметров
- Перегрузка процедур
- процедуры устранения неполадок
- Практическое руководство. Определение нескольких версий процедуры
- Как: Вызов перегруженной процедуры
- Перегрузка процедуры, которая принимает неограниченное количество параметров
- Разрешение перегрузки