Como passar procedimentos para outro procedimento no Visual Basic
Este exemplo mostra como usar delegados para passar um procedimento para outro.
Um delegado é um tipo que você pode usar como qualquer outro tipo no Visual Basic. O operador AddressOf
retorna um objeto delegado quando aplicado a um nome de procedimento.
Este exemplo tem um procedimento com um parâmetro delegado que pode fazer uma referência a outro procedimento, obtido com o operador AddressOf
.
Criar o delegado e os procedimentos correspondentes
Para criar 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 retornado que corresponda aos deMathOperator
, para que as assinaturas correspondam.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 correspondaMathOperator
.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Crie um procedimento chamado
DelegateTest
que usa um delegado como um parâmetro.Esse procedimento pode aceitar uma referência a
AddNumbers
ouSubtractNumbers
porque suas assinaturas correspondem à assinaturaMathOperator
.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 daAddNumbers
atuando em5
e3
, que é 8. Em seguida, o resultado deSubtractNumbers
atua em9
e3
é exibido, que é 6.