此示例演示如何使用委托将过程传递给另一个过程。
委托是一种类型,可以像 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。