Практическое руководство. Передача процедур другой процедуре в Visual Basic
Обновлен: Ноябрь 2007
В этом примере показано использование делегатов для передачи процедуры другой процедуры.
Делегат — это тип, который можно использовать как любой другой тип в 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 или SubtactNumbers, так как их подписи соответствуют подписи 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.
См. также
Задачи
Практическое руководство. Вызов метода Delegate