Procedura: passare una routine a un'altra routine in Visual Basic
Aggiornamento: novembre 2007
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 SubtactNumbers 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 visualizza il risultato della routine SubtractNumbers applicata a 9 e 3, ovvero 6.
Vedere anche
Attività
Procedura: richiamare un metodo delegato