Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом примере показано, как использовать делегатов для передачи процедуры в другую процедуру.
Делегат — это тип, который можно использовать как любой другой тип в 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.