如何:在 Visual Basic 中将过程传递给另一过程
此示例演示如何使用委托将一个过程传递给另一个过程。
委托是一种类型,可在 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
的委托作为参数。Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
调用
Test
时,它会先显示AddNumbers
作用于5
和3
的结果,即 8。 然后显示SubtractNumbers
作用于9
和3
的结果,即 6。