更新: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。