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


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

См. также

Задачи

Практическое руководство. Вызов метода делегата (Visual Basic)

Ссылки

Оператор AddressOf (Visual Basic)

Оператор Delegate

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

Делегаты (Visual Basic)