Практическое руководство. Передача процедур другой процедуре в 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.