Практическое руководство. Передача процедур другой процедуре в Visual Basic
В этом примере показано использование делегатов для передачи процедуры другой процедуры.
Делегат — это тип, который можно использовать как любой другой тип в Visual Basic. Оператор AddressOf возвращает объект делегата при применении к имени процедуры.
В этом примере показана процедура с параметром делегатом, который может принимать ссылку на другую процедуру, полученную с помощью оператора AddressOf.
Создание делегата и согласование процедур
Создайте делегата с именем MathOperator.
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Создайте процедуру с именем AddNumbers с параметрами и возвращаемым значением, которые совпадают с MathOperator, то есть сигнатуры совпадают.
Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Создайте процедуру с именем SubtractNumbers с сигнатурой, которая соответствует MathOperator.
Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Создайте процедуру с именем DelegateTest, которая принимает делегат в качестве параметра.
Эта процедура может принимать ссылку на AddNumbers или SubtractNumbers, так как их сигнатуре соответствуют сигнатура MathOperator.
Sub DelegateTest( ByVal x As Double, ByVal op As MathOperator, ByVal y As Double ) Dim ret As Double ret = op.Invoke(x, y) ' Call the method. MsgBox(ret) End Sub
Создайте процедуру с именем Test, которая сначала вызывает DelegateTest с делегатом для AddNumbers в качестве параметра и затем снова с делегатом для SubtractNumbers в качестве параметра.
Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Когда вызывается Test, то сначала он отображает результат действия AddNumbers на значения 5 и 3, и этот результат равен 8. Затем отображается результат действия SubtractNumbers на 9 и 3, который равен 6.
См. также
Задачи
Практическое руководство. Вызов метода делегата (Visual Basic)
Ссылки
Оператор AddressOf (Visual Basic)