Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo usar delegados para pasar un procedimiento a otro procedimiento.
Un delegado es un tipo que puede usar como cualquier otro tipo en Visual Basic. El AddressOf
operador devuelve un objeto delegado cuando se aplica a un nombre de procedimiento.
Este ejemplo tiene un procedimiento con un parámetro delegado que puede tomar una referencia a otro procedimiento, obtenido con el AddressOf
operador .
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 laMathOperator
firma.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 llameDelegateTest
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 deAddNumbers
actuando sobre5
y3
, que es 8. Entonces, el resultado deSubtractNumbers
actuando sobre9
y3
se muestra, siendo 6.