Dela via


Anvisningar: Skicka procedurer till en annan procedur i Visual Basic

Det här exemplet visar hur du använder ombud för att skicka en procedur till en annan procedur.

Ett ombud är en typ som du kan använda som vilken annan typ som helst i Visual Basic. Operatorn AddressOf returnerar ett ombudsobjekt när det tillämpas på ett procedurnamn.

Det här exemplet har en procedur med en delegatparameter som kan referera till en annan procedur som hämtas med operatorn AddressOf .

Skapa ombuds- och matchningsprocedurerna

  1. Skapa ett ombud med namnet MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. Skapa en procedur med namnet AddNumbers med parametrar och returvärde som matchar värdena MathOperatorför , så att signaturerna matchar.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. Skapa en procedur med namnet SubtractNumbers med en signatur som matchar MathOperator.

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. Skapa en procedur med namnet DelegateTest som tar ett ombud som parameter.

    Den här proceduren kan acceptera en referens till AddNumbers eller SubtractNumbers, eftersom deras signaturer matchar signaturen MathOperator .

    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. Skapa en procedur med namnet Test som anropar DelegateTest en gång med ombudet för AddNumbers som en parameter och igen med ombudet för SubtractNumbers som parameter.

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

    När Test anropas visas först resultatet av AddNumbers att agera på 5 och 3, vilket är 8. Sedan visas resultatet av SubtractNumbers att agera på 9 och 3 , vilket är 6.

Se även