此示例演示如何使用委托将过程传递给另一个过程。
委托是一种类型,可以像 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签名的引用,或者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创建一个名为
Test的过程,该过程首先使用代表DelegateTest的委托作为参数调用AddNumbers一次,然后使用代表SubtractNumbers的委托作为参数再次调用AddNumbers。Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub当调用
Test时,它首先显示AddNumbers作用于5和3的结果,即8。 然后SubtractNumbers作用于9和3的结果显示出来,即为 6。