Cómo: Pasar procedimientos a otro procedimiento en Visual Basic

En este ejemplo se muestra cómo utilizar los delegados para pasar un procedimiento a otro procedimiento.

Un delegado es un tipo que puede usar como cualquier otro tipo en Visual Basic. El operador AddressOf devuelve un objeto delegado cuando se aplica a un nombre de procedimiento.

Este ejemplo tiene un procedimiento con un parámetro delegado que puede hacer referencia a otro procedimiento, obtenido con el operador AddressOf.

Creación del delegado y procedimientos coincidentes

  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 parámetros y valor devuelto que coincida con los de MathOperator, de modo que las firmas coincidan.

    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 a 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
    
  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, primero muestra el resultado de la actuación de AddNumbers en 5 y 3, que es 8. A continuación, aparece el resultado de la actuación de SubtractNumbers en 9 y 3, que es 6.

Consulte también