如何将子过程作为参数VB.NET传递

时间:2016-01-21 19:31:08

标签: vb.net parameters

我正在编写一个函数,它接受一个外部定义的Sub Procedure,并根据所包含的类中的变量运行它一定次数。如何在VB.NET中将Sub devs作为参数传递?或者这样做的另一种方法是什么? (更新:这是一个WPF应用程序的计时器类,我将在我正在制作的Pong游戏中使用。新方法应该将子程序作为参数,然后它告诉另一个名为Run()的子程序每隔x毫秒执行一次子程序

1 个答案:

答案 0 :(得分:2)

您可以将方法(Sub)声明为采用Action Delegate参数。这允许您将void方法的地址(HelloWorld)作为参数传递:

Private Sub DoSomething(a As Action)
    ' pick a random number 1-5
    Dim v = RNG.Next(1, 6)
    ' call whatever v times
    For n As Int32 = 0 To v
        a()
    Next
End Sub

Private Sub HelloWorld()
    Console.WriteLine("Null Spark says 'Hello, World!'")
End Sub

调用它只会是:

DoSomething(AddressOf HelloWorld)

正如MSDN所说,Action封装了一个没有参数且不返回值的方法。要包含参数,请使用Action(of T)(参见下一个);要返回值(使用函数),请使用Funcsee this example

如果涉及参数,请使用Action(Of T)。您还可以将变量声明为Action Delegates,这样可以使代码更易于阅读:

Private HelloAction As Action(Of Int32)

然后就像表单加载一样:

HelloAction = AddressOf HelloWorld
...
Private Sub DoSomething(a As Action(Of Int32))
    Dim v = RNG.Next(1, 6)
    For n As Int32 = 0 To v
        a(n)            ' pass the int param
    Next
End Sub

在这种情况下,HelloWorld将是:

Private Sub HelloWorld(x As Integer)