Cómo: Pasar procedimientos a otro procedimiento en Visual Basic
En este ejemplo se muestra cómo utilizar los delegados para pasar un procedimiento a otro procedimiento.
Un delegado es un tipo que puede usar como cualquier otro tipo en Visual Basic. El operador AddressOf
devuelve un objeto delegado cuando se aplica a un nombre de procedimiento.
Este ejemplo tiene un procedimiento con un parámetro delegado que puede hacer referencia a otro procedimiento, obtenido con el operador AddressOf
.
Creación del delegado y procedimientos coincidentes
Cree un delegado denominado
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Cree un procedimiento denominado
AddNumbers
con parámetros y valor devuelto que coincida con los deMathOperator
, de modo que las firmas coincidan.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Cree un procedimiento denominado
SubtractNumbers
con una firma que coincida conMathOperator
.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Cree un procedimiento denominado
DelegateTest
que tome un delegado como parámetro.Este procedimiento puede aceptar una referencia a
AddNumbers
oSubtractNumbers
, porque sus firmas coinciden con la firmaMathOperator
.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
Cree un procedimiento denominado
Test
que llame aDelegateTest
una vez con el delegado paraAddNumbers
como parámetro y, de nuevo, con el delegado paraSubtractNumbers
como parámetro.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Cuando se llama a
Test
, primero muestra el resultado de la actuación deAddNumbers
en5
y3
, que es 8. A continuación, aparece el resultado de la actuación deSubtractNumbers
en9
y3
, que es 6.