Freigeben über


Gewusst wie: Übergeben von Prozeduren an eine andere Prozedur in Visual Basic

Aktualisiert: November 2007

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 AddressOf-Operator 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 AddressOf-Operator 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 SubtactNumbers ü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
    

    Nach dem Aufruf von Test wird zuerst das Ergebnis des Aufrufs von AddNumbers mit den Parametern 5 und 3 als Operanden angezeigt. Das Ergebnis lautet "8". Anschließend wird das Ergebnis des Aufrufs von SubtractNumbers mit den Parametern 9 und 3 angezeigt. Das Ergebnis lautet "6".

Siehe auch

Aufgaben

Gewusst wie: Aufrufen einer Delegatenmethode

Referenz

AddressOf-Operator

Delegate-Anweisung

Weitere Ressourcen

Delegaten in Visual Basic