How to: Pass Procedures to Another Procedure in Visual BasicĀ
This example shows how to use delegates to pass a procedure to another procedure.
A delegate is a type that you can use like any other type in Visual Basic. The AddressOf operator returns a delegate object when applied to a procedure name.
This example has a procedure with a delegate parameter that can take a reference to another procedure, obtained with the AddressOf operator.
Create the delegate and matching procedures
Create a delegate named
MathOperator
.Delegate Function MathOperator( _ ByVal x As Double, _ ByVal y As Double _ ) As Double
Create a procedure named
AddNumbers
with parameters and return value that match those ofMathOperator
, so that the signatures match.Function AddNumbers( _ ByVal x As Double, _ ByVal y As Double _ ) As Double Return x + y End Function
Create a procedure named
SubtractNumbers
with a signature that matchesMathOperator
.Function SubtractNumbers( _ ByVal x As Double, _ ByVal y As Double _ ) As Double Return x - y End Function
Create a procedure named
DelegateTest
that takes a delegate as a parameter.This procedure can accept a reference to
AddNumbers
orSubtactNumbers
, because their signatures match theMathOperator
signature.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
Create a procedure named
Test
that callsDelegateTest
once with the delegate forAddNumbers
as a parameter, and again with the delegate forSubtractNumbers
as a parameter.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
When
Test
is called, it first displays the result ofAddNumbers
acting on5
and3
, which is 8. Then the result ofSubtractNumbers
acting on9
and3
is displayed, which is 6.
See Also
Tasks
How to: Invoke a Delegate Method
Reference
AddressOf Operator
Delegate Statement