Procedure: Procedures doorgeven aan een andere procedure in Visual Basic
In dit voorbeeld ziet u hoe u gemachtigden gebruikt om een procedure door te geven aan een andere procedure.
Een gemachtigde is een type dat u kunt gebruiken zoals elk ander type in Visual Basic. De AddressOf
operator retourneert een gedelegeerde-object wanneer dit wordt toegepast op een procedurenaam.
In dit voorbeeld is een procedure met een gemachtigdeparameter die een verwijzing naar een andere procedure kan maken, die met de AddressOf
operator is verkregen.
De gedelegeerde en overeenkomende procedures maken
Maak een gemachtigde met de naam
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Maak een procedure met de naam
AddNumbers
parameters en retourwaarde die overeenkomen met die vanMathOperator
, zodat de handtekeningen overeenkomen.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Maak een procedure met de naam
SubtractNumbers
met een handtekening die overeenkomtMathOperator
met .Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Maak een procedure met de naam
DelegateTest
die een gemachtigde als parameter neemt.Deze procedure kan een verwijzing naar
AddNumbers
ofSubtractNumbers
, omdat de handtekeningen overeenkomen met deMathOperator
handtekening.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
Maak een procedure met de naam
Test
die eenmaal wordt aanroepenDelegateTest
met de gemachtigde voorAddNumbers
als parameter en opnieuw met de gemachtigde voorSubtractNumbers
als parameter.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Wanneer
Test
wordt aangeroepen, wordt eerst het resultaat weergegeven vanAddNumbers
het handelen op5
en3
, wat 8 is. Vervolgens wordt het resultaat vanSubtractNumbers
handelen op9
en3
weergegeven, wat 6 is.