Cómo: Pasar procedimientos a otro procedimiento en Visual Basic
Actualización: noviembre 2007
Este ejemplo muestra cómo se utilizan los delegados para pasar un procedimiento a otro.
Un delegado es un tipo que puede utilizar como cualquier otro tipo en Visual Basic. El operador AddressOf devuelve un objeto de delegado cuando se aplica a un nombre de procedimiento.
Este ejemplo tiene un procedimiento con un parámetro de delegado que puede llevar una referencia a otro procedimiento obtenido con el operador AddressOf.
Crear el delegado y los procedimientos correspondientes
Cree un delegado denominado MathOperator.
Delegate Function MathOperator( _ ByVal x As Double, _ ByVal y As Double _ ) As Double
Cree un procedimiento denominado AddNumbers con los parámetros y el valor devuelto que coincidan con aquéllos de MathOperator para que coincidan las firmas.
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 con MathOperator.
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 para AddNumbers o SubtactNumbers porque sus firmas coinciden con la firma MathOperator.
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 a DelegateTest una vez con el delegado para AddNumbers como parámetro y, de nuevo, con el delegado para SubtractNumbers como parámetro.
Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Cuando se llama a Test, muestra en primer lugar el resultado de AddNumbers al actuar sobre 5 y 3, que es 8. A continuación, se muestra el resultado de SubtractNumbers al actuar sobre 9 y 3, que es 6.
Vea también
Tareas
Cómo: Invocar un método delegado