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

标签 vb.net parameters

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

最佳答案

您可以将您的方法( 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)

关于vb.net - 如何将子过程作为参数传递 VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932686/

相关文章:

.net - 使用模块来处理表单类元素是否正确?

vb.net - Visual Basic 2010 Picturebox1.图像ftp上传

vb.net - 如何使用 OpenFileDialog

php - symfony2 获取路由参数( Controller 参数与请求)

java - android reSTLet 添加非标准头参数

vb.net - 如果满足条件,如何自动更新 devexpress gridview 数据列值?

vb.net - 如何更改 GroupBox 文本的前景色而不更改其子前景色?

parameters - 如何在 visio 的类图中使用其他属性类型?

SQL 报告服务,参数值更新未显示

python - 如何从 pytest_addoptions 访问 pytest conftest 中的命令行输入并在 fixture 参数中使用它?