Nasıl yapılır: Visual Basic'de Başka Bir Yordama Yordam Geçirme

Bu örnekte, bir yordamı başka bir yordama geçirmek için temsilcilerin nasıl kullanılacağı gösterilmektedir.

Temsilci, Visual Basic'teki diğer türlerde olduğu gibi kullanabileceğiniz bir türdür. işleci, AddressOf bir yordam adına uygulandığında bir temsilci nesnesi döndürür.

Bu örnekte, işleçle elde edilen başka bir yordama başvuru alabilen bir temsilci parametresine AddressOf sahip bir yordam vardır.

Temsilci ve eşleşen yordamları oluşturma

  1. adlı MathOperatorbir temsilci oluşturun.

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. parametreleriyle adlı AddNumbers bir yordam oluşturun ve imzaların eşleşmesi MathOperatoriçin değerleriyle eşleşen bir değer döndürin.

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. ile eşleşen MathOperatorbir imza ile adlı SubtractNumbers bir yordam oluşturun.

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. Parametre olarak temsilci alan adlı DelegateTest bir yordam oluşturun.

    İmzaları imzayla AddNumbers eşleştiğinden, bu yordam veya SubtractNumbersiçin bir başvuru kabul MathOperator edebilir.

    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. parametresi için temsilcisiyle bir kez ve parametresi olarak için temsilcisiyle SubtractNumbersAddNumbers bir kez çağıran DelegateTest adlı Test bir yordam oluşturun.

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

    ÇağrıldığındaTest, ilk olarak ve 3üzerinde 5 8 olan üzerinde hareket etmenin AddNumbers sonucunu görüntüler. Ardından ve üzerinde 93 hareket etmenin SubtractNumbers sonucu görüntülenir ve 6 olur.

Ayrıca bkz.