Поделиться через


Практическое руководство. Передача процедур другой процедуре в Visual Basic

Обновлен: Ноябрь 2007

В этом примере показано использование делегатов для передачи процедуры другой процедуры.

Делегат — это тип, который можно использовать как любой другой тип в Visual Basic. Оператор AddressOf возвращает объект делегата при применении к имени процедуры.

В этом примере показана процедура с параметром делегатом, который может принимать ссылку на другую процедуру, полученную с помощью оператора AddressOf.

Создание делегата и согласование процедур

  1. Создайте делегата с именем MathOperator.

    Delegate Function MathOperator( _
        ByVal x As Double, _
        ByVal y As Double _
    ) As Double
    
  2. Создайте процедуру с именем AddNumbers с параметрами и возвращаемым значением, которые совпадают с MathOperator, то есть подписи совпадают.

    Function AddNumbers( _
        ByVal x As Double, _
        ByVal y As Double _
    ) As Double
        Return x + y
    End Function
    
  3. Создайте процедуру с именем SubtractNumbers с подписью, которая соответствует MathOperator.

    Function SubtractNumbers( _
        ByVal x As Double, _
        ByVal y As Double _
    ) As Double
        Return x - y
    End Function
    
  4. Создайте процедуру с именем 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
    
  5. Создайте процедуру с именем 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

Ссылки

Оператор AddressOf

Оператор Delegate

Другие ресурсы

Делегаты в Visual Basic