Gewusst wie: Übergeben von Prozeduren an eine andere Prozedur in Visual Basic
In diesem Beispiel wird veranschaulicht, wie mithilfe von Delegaten eine Prozedur an eine andere Prozedur übergeben wird.
Ein Delegat ist ein Typ, den Sie wie jeden anderen Typ in Visual Basic verwenden können. Wenn der Operator AddressOf auf einen Prozedurnamen angewendet wird, gibt er ein Delegatobjekt zurück.
Im vorliegenden Beispiel liegt eine Prozedur mit einem Delegatparameter vor. Dieser kann eine Referenz an eine andere Prozedur enthalten, die mit dem Operator AddressOf abgerufen wird.
Erstellen des Delegaten und übereinstimmender 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. Diese müssen mit denjenigen von MathOperator übereinstimmen, da andernfalls unterschiedliche Signaturen vorliegen.
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 der von MathOperator entspricht.
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, der als Parameter ein Delegat übergeben wird.
Dieser Prozedur kann ein Verweis auf AddNumbers oder SubtractNumbers übergeben werden, weil deren Signaturen der Signatur von MathOperator entsprechen.
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, die DelegateTest einmal mit dem Delegaten für AddNumbers als Parameter und ein zweites Mal mit dem Delegaten für SubtractNumbers 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 von AddNumbers angezeigt. Dabei wird die Summe aus 5 und 3 gebildet, also 8. Anschließend wird das Ergebnis des Vorgangs SubtractNumbers angezeigt. Dabei wird die Differenz zwischen 9 und 3 ermittelt, also 6.
Siehe auch
Aufgaben
Gewusst wie: Aufrufen einer Delegatenmethode (Visual Basic)
Referenz
AddressOf-Operator (Visual Basic)