Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Перегрузка процедуры означает определение процедуры в нескольких версиях, используя одно и то же имя, но разные списки параметров. Целью перегрузки является определение нескольких тесно связанных версий процедуры без необходимости различать их по имени. Это можно сделать, изменив список параметров.
Правила перегрузки
При перегрузке процедуры применяются следующие правила:
То же имя. Каждая перегруженная версия должна использовать то же имя процедуры.
Другая подпись. Каждая перегруженная версия должна отличаться от всех других перегруженных версий по крайней мере в одном из следующих аспектов:
Количество параметров
Порядок параметров
Типы данных параметров
Число параметров типа (для универсальной процедуры)
Тип возвращаемого значения (только для оператора преобразования)
Вместе с именем процедуры предыдущие элементы коллективно называются сигнатурой процедуры. При вызове перегруженной процедуры компилятор использует подпись для проверки, что вызов правильно соответствует определению.
Элементы, не участвующие в подписи. Невозможно перегрузить процедуру без изменения подписи. В частности, нельзя перегружать процедуру, изменяя только один или несколько следующих элементов:
Ключевые слова модификатора процедуры, такие как
Public
,Shared
иStatic
Имена параметров или типовых параметров
Ограничения параметров типа (для универсальной процедуры)
Ключевые слова модификатора параметров, такие как
ByRef
иOptional
Возвращается ли значение
Тип данных возвращаемого значения (за исключением оператора преобразования)
Элементы в предыдущем списке не являются частью подписи. Хотя их нельзя использовать для различения перегруженных версий, их можно различать между перегруженными версиями, которые правильно различаются по их подписям.
Late-Bound Аргументы. Если вы планируете передать переменную объекта с поздней привязкой в перегруженную версию, необходимо объявить соответствующий параметр как Object.
Несколько версий процедуры
Предположим, что вы пишете Sub
процедуру для публикации транзакции по балансу клиента, и вы хотите иметь возможность ссылаться на клиента по имени или по номеру счета. Для этого можно определить две различные Sub
процедуры, как показано в следующем примере:
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Перегруженные версии
Альтернативой является перегрузка имени одной процедуры. Ключевое слово "Перегрузки" можно использовать для определения версии процедуры для каждого списка параметров следующим образом:
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Дополнительные перегрузки
Если вы также хотите принять сумму транзакции в любом Decimal
или Single
, можно дополнительно перегрузить post
, чтобы реализовать эту возможность. Если вы сделали это для каждой перегрузки в предыдущем примере, у вас будет четыре Sub
процедуры с одинаковым именем, но с четырьмя разными сигнатурами.
Преимущества перегрузки
Преимущество перегрузки процедуры заключается в гибкости вызова. Чтобы использовать процедуру post
, объявленную в предыдущем примере, вызывающий код может получить идентификацию клиента как a String
или an Integer
, а затем вызвать ту же процедуру в любом случае. Проиллюстрируем это на примере.
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
См. также
- Процедуры
- Практическое руководство. Определение нескольких версий процедуры
- Как: Вызов перегруженной процедуры
- Как перегрузить процедуру, которая принимает необязательные параметры
- Перегрузка процедуры, которая принимает неограниченное количество параметров
- рекомендации по перегрузке процедур
- Разрешение перегрузки
- перегрузки
- Универсальные типы в Visual Basic