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
Creare un delegato denominato
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Creare una routine denominata
AddNumbers
con i parametri e il valore restituito corrispondenti a quelli diMathOperator
, in modo che le firme corrispondano.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Creare una routine denominata
SubtractNumbers
con una firma corrispondente aMathOperator
.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Creare una routine denominata
DelegateTest
che accetta un delegato come parametro.Questa procedura può accettare un riferimento a
AddNumbers
oSubtractNumbers
, perché le relative firme corrispondono alla firma diMathOperator
.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
Creare una routine denominata
Test
che chiamaDelegateTest
una volta con il delegato perAddNumbers
come parametro e di nuovo con il delegato perSubtractNumbers
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'azioneAddNumbers
su5
e3
, ovvero 8. Visualizza quindi il risultato dell'azione diSubtractNumbers
su9
e3
, ovvero 6.