如何:在 Visual Basic 中将过程传递给另一过程
更新:2007 年 11 月
此示例演示如何使用委托将过程传递给另一个过程。
委托是一种类型,与任何其他类型一样可在 Visual Basic 中使用。AddressOf 运算符如果应用到一个过程名,则返回一个委托对象。
此示例有一个具有委托参数的过程,该委托参数可接受对另一个过程的引用,而引用则是通过 AddressOf 运算符获得的。
创建委托和匹配过程
创建一个名为 MathOperator 的委托。
Delegate Function MathOperator( _ ByVal x As Double, _ ByVal y As Double _ ) As Double
创建一个名为 AddNumbers 的过程,其参数和返回值与 MathOperator 的参数和返回值匹配,以使签名匹配。
Function AddNumbers( _ ByVal x As Double, _ ByVal y As Double _ ) As Double Return x + y End Function
创建名为 SubtractNumbers 的过程,其签名与 MathOperator 匹配。
Function SubtractNumbers( _ ByVal x As Double, _ ByVal y As Double _ ) As Double Return x - y End Function
创建一个名为 DelegateTest 的过程,它接受一个委托作为参数。
此过程可接受对 AddNumbers 或 SubtactNumbers 的引用,这是因为它们的签名与 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
创建一个名为 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。