Partilhar via


Como: Passar procedimentos para outro procedimento no Visual Basic

Este exemplo mostra como usar delegados para passar um procedimento para outro procedimento.

Um delegado é um tipo que você pode usar como qualquer outro tipo no Visual Basic. O AddressOf operador retorna um objeto delegado quando aplicado a um nome de procedimento.

Este exemplo tem um procedimento com um parâmetro delegate que pode fazer referência a outro procedimento, obtido com o AddressOf operador.

Criar os procedimentos de delegação e correspondência

  1. Crie um delegado chamado MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. Crie um procedimento nomeado AddNumbers com parâmetros e valor de retorno que correspondam aos de , para MathOperatorque as assinaturas coincidam.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. Crie um procedimento nomeado SubtractNumbers com uma assinatura que corresponda ao MathOperator.

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. Crie um procedimento chamado DelegateTest que tome um delegado como parâmetro.

    Este procedimento pode aceitar uma referência a AddNumbers ou SubtractNumbers, porque as suas assinaturas correspondem à MathOperator assinatura.

    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. Crie um procedimento chamado Test que chama DelegateTest uma vez com o delegado para AddNumbers como um parâmetro e novamente com o delegado para SubtractNumbers como um parâmetro.

    Protected Sub Test()
        DelegateTest(5, AddressOf AddNumbers, 3)
        DelegateTest(9, AddressOf SubtractNumbers, 3)
    End Sub
    

    Quando Test é chamado, ele primeiro exibe o resultado de AddNumbers agir sobre 5 e 3, que é 8. Em seguida, o resultado de SubtractNumbers agir sobre 9 e 3 é exibido, que é 6.

Consulte também