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