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
Crie um delegado chamado
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Crie um procedimento nomeado
AddNumbers
com parâmetros e valor de retorno que correspondam aos de , paraMathOperator
que as assinaturas coincidam.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Crie um procedimento nomeado
SubtractNumbers
com uma assinatura que corresponda aoMathOperator
.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Crie um procedimento chamado
DelegateTest
que tome um delegado como parâmetro.Este procedimento pode aceitar uma referência a
AddNumbers
ouSubtractNumbers
, 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
Crie um procedimento chamado
Test
que chamaDelegateTest
uma vez com o delegado paraAddNumbers
como um parâmetro e novamente com o delegado paraSubtractNumbers
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 deAddNumbers
agir sobre5
e3
, que é 8. Em seguida, o resultado deSubtractNumbers
agir sobre9
e3
é exibido, que é 6.