Cómo: Pasar procedimientos a otro procedimiento en Visual Basic
Este ejemplo muestra cómo se utilizan los delegados para pasar un procedimiento a otro.
Un delegado es un tipo que se puede usar 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 SubtractNumbers 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, primero muestra el resultado de AddNumbers sobre 5 y 3, que es 8. A continuación, se muestra el resultado de SubtractNumbers sobre 9 y 3, que es 6.
Vea también
Tareas
Cómo: Invocar un método delegado (Visual Basic)
Referencia
AddressOf (Operador) (Visual Basic)