我正在编写一个函数,它接受一个在外部定义的子过程,并根据所包含类中的变量运行它一定次数。如何在VB.NET中将Sub devs作为参数传递?或者有没有替代方法?(更新:这是一个用于WPF应用程序的计时器类,我将在制作的乒乓球游戏中使用。新方法应该将一个子过程作为参数,然后告诉另一个名为Run()
的子过程每个x毫秒执行该子过程)
我正在编写一个函数,它接受一个在外部定义的子过程,并根据所包含类中的变量运行它一定次数。如何在VB.NET中将Sub devs作为参数传递?或者有没有替代方法?(更新:这是一个用于WPF应用程序的计时器类,我将在制作的乒乓球游戏中使用。新方法应该将一个子过程作为参数,然后告诉另一个名为Run()
的子过程每个x毫秒执行该子过程)
Sub
) 声明为接受一个 Action Delegate
参数。这样,您就可以将无返回值方法 (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)
Action
封装了一个没有参数且不返回值的方法。如果要包含参数,请使用Action(of T)
(请参见下文);如果要返回值(使用函数),请使用Func
,请参阅此示例。
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)
Func
委托,适用于方法返回值的情况如此处所示。 - Ňɏssa Pøngjǣrdenlarp