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


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

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

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

См. также