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.

Cree 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 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 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)

Delegate (Instrucción)

Otros recursos

Delegados (Visual Basic)