Перегрузка процедур (Visual Basic)
Перегрузка процедуры означает определение процедуры в нескольких версиях, используя одно и то же имя, но разные списки параметров. Целью перегрузки является определение нескольких тесно связанных версий процедуры без необходимости различать их по имени. Это можно сделать, изменив список параметров.
Правила перегрузки
При перегрузке процедуры применяются следующие правила:
То же имя. Каждая перегруженная версия должна использовать то же имя процедуры.
Другая подпись. Каждая перегруженная версия должна отличаться от всех других перегруженных версий по крайней мере в одном из следующих аспектов:
Количество параметров
Порядок параметров
Типы данных параметров
Число параметров типа (для универсальной процедуры)
Тип возвращаемого значения (только для оператора преобразования)
Вместе с именем процедуры предыдущие элементы коллективно называются сигнатурой процедуры. При вызове перегруженной процедуры компилятор использует сигнатуру для проверка, что вызов правильно соответствует определению.
Элементы, не участвующие в подписи. Невозможно перегрузить процедуру без изменения подписи. В частности, нельзя перегружать процедуру, изменяя только один или несколько следующих элементов:
Модификатор процедур ключевое слово, например
Public
,Shared
иStatic
Имена параметров параметра или типа
Ограничения параметров типа (для универсальной процедуры)
Модификатор параметров ключевое слово, например
ByRef
иOptional
Возвращается ли значение
Тип данных возвращаемого значения (за исключением оператора преобразования)
Элементы в предыдущем списке не являются частью подписи. Хотя их нельзя использовать для различения перегруженных версий, их можно различать между перегруженными версиями, которые правильно различаются по их подписям.
Аргументы с задержкой привязки. Если вы планируете передать переменную объекта с поздней привязкой в перегруженную версию, необходимо объявить соответствующий параметр как 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
См. также
- Процедуры
- Практическое руководство. Определение различных версий процедуры
- Практическое руководство. Вызов перегруженной процедуры
- Практическое руководство. Перегрузка процедуры, которая принимает один необязательный параметр
- Практическое руководство. Перегрузка процедуры, принимающей неопределенное число параметров
- Вопросы, связанные с перегрузкой процедур
- Overload Resolution
- Overloads
- Generic Types in Visual Basic