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

  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, die mit denen von MathOperator übereinstimmen, sodass die Signaturen übereinstimmen.

    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 mit MathOperator übereinstimmt.

    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, die einen Delegaten als Parameter entgegennimmt.

    Diese Prozedur kann einen Verweis auf AddNumbers oder SubtractNumbers annehmen, da ihre Signaturen mit der Signatur von MathOperator ü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
    
  5. Erstellen Sie eine Prozedur mit dem Namen Test, die DelegateTest einmal mit dem Delegaten für AddNumbers als Parameter und dann 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 der Aktion von AddNumbers auf 5 und 3 angezeigt, das 8 ist. Dann wird das Ergebnis der Aktion von SubtractNumbers auf 9 und 3 angezeigt, das 6 ist.

Siehe auch