Condividi tramite


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

Nell'esempio riportato di seguito viene illustrato come passare una routine a un'altra routine con l'ausilio dei delegati.

Un delegato è un tipo che è possibile utilizzare come qualsiasi altro tipo in Visual Basic. Quando viene applicato a un nome di routine, l'operatore AddressOf restituisce un oggetto delegato.

Nell'esempio riportato di seguito viene illustrata una routine a cui è associato un delegato come parametro che può accettare un riferimento a un'altra routine e viene ottenuto con l'operatore AddressOf.

Per 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 parametri e valore restituito corrispondenti a quelli di MathOperator, in modo che le firme coincidano.

    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 routine può accettare un riferimento a AddNumbers o a SubtractNumbers poiché le relative firme corrispondono alla 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. Creare una routine denominata Test che chiama DelegateTest una volta utilizzando come parametro il delegato per AddNumbers e un'altra volta utilizzando come parametro il delegato per SubtractNumbers.

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

    Quando viene chiamata, la routine Test visualizza innanzitutto il risultato della routine AddNumbers applicata a 5 e 3, ovvero 8. Quindi viene visualizzato il risultato di SubtractNumbers applicato a 9 e 3, ovvero 6.

Vedere anche

Attività

Procedura: richiamare un metodo delegato (Visual Basic)

Riferimenti

Operatore AddressOf (Visual Basic)

Istruzione Delegate

Altre risorse

Delegati (Visual Basic)