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 DoubleCree un procedimiento denominado
AddNumberscon 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 FunctionCree un procedimiento denominado
SubtractNumberscon una firma que coincida conMathOperator.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End FunctionCree un procedimiento denominado
DelegateTestque tome un delegado como parámetro.Este procedimiento puede aceptar una referencia a
AddNumbersoSubtractNumbers, porque sus firmas coinciden con laMathOperatorfirma.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 SubCree un procedimiento denominado
Testque llameDelegateTestuna vez con el delegado paraAddNumberscomo parámetro y, de nuevo, con el delegado paraSubtractNumberscomo parámetro.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End SubCuando se llama a
Test, primero muestra el resultado deAddNumbersactuando sobre5y3, que es 8. Entonces, el resultado deSubtractNumbersactuando sobre9y3se muestra, siendo 6.