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 em Visual Basic. O operador AddressOf retorna um objeto delegado quando aplicado a um nome de procedimento.
Este exemplo tem um procedimento um parâmetro delegado que pode receber uma refer6encia para outro procedimento, obtida com o operador AddressOf.
Crie o delegado e procedimentos correspondentes.
Cria um delegado de nome MathOperator.
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Crie um procedimento de nome AddNumbers com parâmetros e valor de retorno que correspondem àqueles do MathOperator, de modo que as assinaturas coincidam.
Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Crie um procedimento de nome SubtractNumbers com uma assinatura que corresponde ao MathOperator.
Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Crie um procedimento de nome DelegateTest que tome um delegado como parâmetro.
Este procedimetno pode aceitar uma referência a AddNumbers ou SubtractNumbers, porque suas assinaturas correspondem à assinatura do 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
Crie um procedimento de nome Test que chame DelegateTest uma vez com o delegado como parâmetro de AddNumbers, e de novo com o delegado como parâmetro de SubtractNumbers.
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 atuante em 5 e 3, que é 8. Em seguida, o resultado de SubtractNumbers atuando em 9 e 3 for exibida, que é 6.
Consulte também
Tarefas
Como invocar um método delegado (Visual Basic)
Referência
Operador AddressOf (Visual Basic)