Udostępnij za pośrednictwem


Porady: przekazywanie procedur do innej procedury w Visual Basic

W tym przykładzie pokazano, jak za pomocą delegatów przekazać procedurę do innej procedury.

Delegat jest typem, którego można użyć jak dowolnego innego typu w Visual Basic. Operator zwraca obiekt delegata AddressOf po zastosowaniu do nazwy procedury.

W tym przykładzie przedstawiono procedurę z parametrem delegowanym, który może odwoływać się do innej procedury uzyskanej z operatorem AddressOf .

Tworzenie procedur delegata i dopasowywania

  1. Utwórz delegata o nazwie MathOperator.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. Utwórz procedurę o nazwie AddNumbers z parametrami i zwracaną wartością zgodną MathOperatorz parametrami , tak aby podpisy były zgodne.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. Utwórz procedurę o nazwie SubtractNumbers z podpisem zgodnym MathOperatorz .

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. Utwórz procedurę o nazwie DelegateTest , która przyjmuje delegata jako parametr.

    Ta procedura może zaakceptować odwołanie do AddNumbers elementu lub SubtractNumbers, ponieważ ich podpisy są zgodne z podpisem 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. Utwórz procedurę o nazwie Test , która wywołuje DelegateTest raz z pełnomocnikiem jako AddNumbers parametr, a następnie ponownie za pomocą delegata jako SubtractNumbers parametru.

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

    Gdy Test jest wywoływana, najpierw wyświetla wynik AddNumbers działania na 5 i 3, czyli 8. Następnie zostanie wyświetlony wynik SubtractNumbers działania 9 i 3 jest wyświetlany, czyli 6.

Zobacz też