如何:在 Visual Basic 中将过程传递给另一过程

此示例演示如何使用委托将一个过程传递给另一个过程。

委托是一种类型,可在 Visual Basic 中像任何其他类型一样使用。 AddressOf 运算符在应用于过程名称时会返回一个委托对象。

此示例有一个带有委托参数(该参数可以引用另一个过程)的过程,通过 AddressOf 运算符获得。

创建委托和匹配过程

  1. 创建名为 MathOperator 的委托。

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. 创建一个名为 AddNumbers 的过程,其参数和返回值与 MathOperator 的匹配,以便签名匹配。

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. 创建一个名为 SubtractNumbers 的过程,其签名与 MathOperator 匹配。

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. 创建一个名为 DelegateTest 的过程,该过程将委托作为参数。

    此过程可以接受对 AddNumbersSubtractNumbers 的引用,因为其签名与 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. 创建一个名为 Test 的过程,该过程调用 DelegateTest 一次,同时将 AddNumbers 的委托作为参数,然后再次将 SubtractNumbers 的委托作为参数。

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

    调用 Test 时,它会先显示 AddNumbers 作用于 53 的结果,即 8。 然后显示 SubtractNumbers 作用于 93 的结果,即 6。

另请参阅