Condividi tramite


Procedura: Passare procedure a un'altra routine in Visual Basic

In questo esempio viene illustrato 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, ottenuta con l'operatore AddressOf .

Creare il delegato e le procedure di corrispondenza

  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 firme corrispondono alla MathOperator firma.

    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 Test viene chiamato, visualizza prima il risultato dell'azione AddNumbers su 5 e 3, ovvero 8. Il risultato dell'azione di SubtractNumbers che agisce su 9 e 3 viene visualizzato, che è 6.

Vedere anche