How to: Pass Procedures to Another Procedure - Visual Basic (original) (raw)
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 toAddNumbers
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 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.