Freigeben über


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

In diesem Beispiel wird gezeigt, wie Stellvertretungen zum Übergeben einer Prozedur an eine andere Prozedur verwendet werden.

Ein Delegat ist ein Typ, den Sie wie jeden anderen Typ in Visual Basic verwenden können. Der AddressOf Operator gibt ein Delegate-Objekt zurück, wenn es auf einen Prozedurnamen angewendet wird.

Dieses Beispiel verfügt über eine Prozedur mit einem Delegatenparameter, der einen Verweis auf eine andere Prozedur annehmen kann, die mit dem AddressOf Operator abgerufen wird.

Erstellen des Delegaten und der übereinstimmenden Prozeduren

  1. Erstellen Sie eine Stellvertretung mit dem Namen MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. Erstellen Sie eine Prozedur AddNumbers mit Parametern und Rückgabewert, die mit denen 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 namens 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 verwendet.

    Dieses Verfahren kann einen Verweis auf AddNumbers oder SubtractNumbers, da ihre Signaturen mit der MathOperator Signatur übereinstimmen, akzeptieren.

    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 erneut mit dem Delegaten für SubtractNumbers als Parameter aufruft.

    Protected Sub Test()
        DelegateTest(5, AddressOf AddNumbers, 3)
        DelegateTest(9, AddressOf SubtractNumbers, 3)
    End Sub
    

    Wenn Test aufgerufen wird, zeigt es zuerst das Ergebnis der Auswirkung von AddNumbers auf 5 und 3, was 8 ist. Dann wird das Ergebnis der Aktion von SubtractNumbers auf 9 und 3 angezeigt, das 6 ist.

Siehe auch