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

  1. Cree un delegado denominado MathOperator.

    Delegate Function MathOperator( _
        ByVal x As Double, _
        ByVal y As Double _
    ) As Double
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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

Referencia

AddressOf (Operador)

Delegate (Instrucción)

Otros recursos

Delegados de Visual Basic