Anvisningar: Skicka procedurer till en annan procedur i Visual Basic
Det här exemplet visar hur du använder ombud för att skicka en procedur till en annan procedur.
Ett ombud är en typ som du kan använda som vilken annan typ som helst i Visual Basic. Operatorn AddressOf
returnerar ett ombudsobjekt när det tillämpas på ett procedurnamn.
Det här exemplet har en procedur med en delegatparameter som kan referera till en annan procedur som hämtas med operatorn AddressOf
.
Skapa ombuds- och matchningsprocedurerna
Skapa ett ombud med namnet
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Skapa en procedur med namnet
AddNumbers
med parametrar och returvärde som matchar värdenaMathOperator
för , så att signaturerna matchar.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Skapa en procedur med namnet
SubtractNumbers
med en signatur som matcharMathOperator
.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Skapa en procedur med namnet
DelegateTest
som tar ett ombud som parameter.Den här proceduren kan acceptera en referens till
AddNumbers
ellerSubtractNumbers
, eftersom deras signaturer matchar signaturenMathOperator
.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
Skapa en procedur med namnet
Test
som anroparDelegateTest
en gång med ombudet förAddNumbers
som en parameter och igen med ombudet förSubtractNumbers
som parameter.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
När
Test
anropas visas först resultatet avAddNumbers
att agera på5
och3
, vilket är 8. Sedan visas resultatet avSubtractNumbers
att agera på9
och3
, vilket är 6.