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

In questo esempio viene illustrato come utilizzare i delegati per passare una routine a un'altra routine.

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

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

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 con i parametri e il valore restituito corrispondenti a quelli di AddNumbers , in modo che le firme MathOperator 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 , perché le relative firme SubtractNumbers 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 che chiama una volta con il delegato per come parametro e di nuovo con Test il delegato per come DelegateTest AddNumbers SubtractNumbers parametro.

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

    Quando Test viene chiamato , viene prima visualizzato il risultato dell'azione AddNumbers su e , che è 5 3 8. Viene quindi visualizzato SubtractNumbers il risultato 9 dell'azione 3 su e , che è 6.

Vedi anche