如何:在 Visual Basic 中将过程传递到另一个过程

此示例演示如何使用委托将过程传递给另一个过程。

委托是一种类型,可以像 Visual Basic 中的其他任何类型一样使用。 当应用于过程名称时,运算符 AddressOf 将返回委托对象。

此示例具有一个具有委托参数的过程,该参数可以引用使用 AddressOf 运算符获取的另一个过程。

创建委托和匹配过程

  1. 创建名为 MathOperator 的委托。

    Delegate Function MathOperator( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
    
  2. 创建一个名为AddNumbers的过程,其参数和返回值应与MathOperator的参数和返回值匹配,以便签名能够一致。

    Function AddNumbers( 
        ByVal x As Double, 
        ByVal y As Double 
    ) As Double
        Return x + y
    End Function
    
  3. 创建一个名为 SubtractNumbers 的过程,其签名与 MathOperator 匹配。

    Function SubtractNumbers( 
        ByVal x As Double, 
        ByVal y As Double
    ) As Double
        Return x - y
    End Function
    
  4. 创建一个名为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
    
  5. 创建一个名为Test的过程,该过程首先使用代表DelegateTest的委托作为参数调用AddNumbers一次,然后使用代表SubtractNumbers的委托作为参数再次调用AddNumbers

    Protected Sub Test()
        DelegateTest(5, AddressOf AddNumbers, 3)
        DelegateTest(9, AddressOf SubtractNumbers, 3)
    End Sub
    

    当调用Test时,它首先显示AddNumbers作用于53的结果,即8。 然后SubtractNumbers作用于93的结果显示出来,即为 6。

另请参阅