Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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
orSubtractNumbers
, 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.