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

  1. Erstellen Sie einen Delegaten mit dem Namen MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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)

Delegate-Anweisung

Weitere Ressourcen

Delegaten (Visual Basic)