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 of MathOperator, 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 matches MathOperator.
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 or SubtractNumbers, because their signatures match the MathOperator 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 calls DelegateTest once with the delegate for AddNumbers as a parameter, and again with the delegate for SubtractNumbers 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 of AddNumbers acting on 5 and 3, which is 8. Then the result of SubtractNumbers acting on 9 and 3 is displayed, which is 6.
See Also
Tasks
How to: Invoke a Delegate Method (Visual Basic)
Reference
AddressOf Operator (Visual Basic)