Gewusst wie: Übergeben von Prozeduren an eine andere Prozedur in Visual Basic
In diesem Beispiel wird veranschaulicht, wie mit Delegaten eine Prozedur an eine andere Prozedur übergeben werden kann.
Ein Delegat ist ein Typ, den Sie wie jeden anderen Typ in Visual Basic verwenden können. Der AddressOf
-Operator gibt ein Delegatobjekt zurück, wenn er auf einen Prozedurnamen angewandt wird.
Dieses Beispiel enthält eine Prozedur mit einem Delegatenparameter, der einen Verweis auf eine andere, mit dem AddressOf
Operator abgerufene Prozedur entgegennehmen kann.
Erstellen des Delegaten und der übereinstimmenden Prozeduren
Erstellen Sie einen Delegaten mit dem Namen
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Erstellen Sie eine Prozedur mit dem Namen
AddNumbers
mit Parametern und einem Rückgabewert, die mit denen vonMathOperator
übereinstimmen, sodass die Signaturen übereinstimmen.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Erstellen Sie eine Prozedur mit dem Namen
SubtractNumbers
mit einer Signatur, die mitMathOperator
übereinstimmt.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Erstellen Sie eine Prozedur mit dem Namen
DelegateTest
, die einen Delegaten als Parameter entgegennimmt.Diese Prozedur kann einen Verweis auf
AddNumbers
oderSubtractNumbers
annehmen, da ihre Signaturen mit der Signatur vonMathOperator
übereinstimmen.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
Erstellen Sie eine Prozedur mit dem Namen
Test
, dieDelegateTest
einmal mit dem Delegaten fürAddNumbers
als Parameter und dann mit dem Delegaten fürSubtractNumbers
als Parameter aufruft.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Beim Aufruf von
Test
wird zuerst das Ergebnis der Aktion vonAddNumbers
auf5
und3
angezeigt, das 8 ist. Dann wird das Ergebnis der Aktion vonSubtractNumbers
auf9
und3
angezeigt, das 6 ist.