Udostępnij za pomocą


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 AddressOf zwraca obiekt delegata 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 .

Utwórz delegata i dopasowujące procedury

  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ą z tymi dla MathOperator, aby podpisy się zgadzały.

    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 sygnaturą zgodną z MathOperator.

    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 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 delegatem dla AddNumbers jako parametrem, a następnie ponownie z delegatem dla SubtractNumbers jako parametrem.

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

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

Zobacz także