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
Creare un delegato denominato MathOperator.
Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
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
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
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
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)