Procedura: passare una routine a un'altra routine in Visual Basic

Questo esempio illustra come usare i delegati per passare una routine a un'altra routine.

Un delegato è un tipo che è possibile usare come qualsiasi altro tipo in Visual Basic. L'operatore AddressOf restituisce un oggetto delegato quando viene applicato a un nome di routine.

In questo esempio è presente una routine con un parametro delegato che può accettare un riferimento a un'altra routine, ottenuto con l'operatore AddressOf.

Creare il delegato e le routine corrispondenti

  1. Creare un delegato denominato MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. Creare una routine denominata AddNumbers con i parametri e il valore restituito corrispondenti a quelli di MathOperator, in modo che le firme corrispondano.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. Creare una routine denominata SubtractNumbers con una firma corrispondente a MathOperator.

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. Creare una routine denominata DelegateTest che accetta un delegato come parametro.

    Questa procedura può accettare un riferimento a AddNumbers o SubtractNumbers, perché le relative firme corrispondono alla firma di 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. Creare una routine denominata Test che chiama DelegateTest una volta con il delegato per AddNumbers come parametro e di nuovo con il delegato per SubtractNumbers come parametro.

    Protected Sub Test()
        DelegateTest(5, AddressOf AddNumbers, 3)
        DelegateTest(9, AddressOf SubtractNumbers, 3)
    End Sub
    

    Quando viene chiamato Test, visualizza prima il risultato dell'azione AddNumbers su 5 e 3, ovvero 8. Visualizza quindi il risultato dell'azione di SubtractNumbers su 9 e 3, ovvero 6.

Vedi anche