如何:在 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 的过程,它接受一个委托作为参数。

    此过程可接受对 AddNumbers 或 SubtractNumbers 的引用,这是因为它们的签名与 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 的过程,它使用 AddNumbers 的委托作为参数调用 DelegateTest 一次,然后使用 SubtractNumbers 的委托作为参数再次调用。

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

    调用 Test 时,它首先显示 AddNumbers 对 5 和 3 的操作结果,也就是 8。 然后显示 SubtractNumbers 对 9 和 3 的操作结果,也就是 6。

请参见

任务

如何:调用委托方法 (Visual Basic)

参考

AddressOf 运算符 (Visual Basic)

Delegate 语句

其他资源

委托 (Visual Basic)