传递函数作为vb.net中的参数?

时间:2013-10-21 15:21:59

标签: vb.net function functional-programming parameter-passing

我有一个类对excel文件执行许多类似但不同的读/写操作。 所有这些操作都在单独的功能中定义。它们都必须包含在相同的长代码块中(检查和打开文件,保存,关闭等的代码)。什么是不必每次都复制此代码的合理方法? 问题是,在执行每个方法不同的代码之前,我不能只包含一个包含所有共享代码的方法,因为该代码必须包含在共享代码的if,try和for语句的多个层中。

是否可以将函数作为参数传递,然后在共享代码中运行该函数?或者有更好的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:28)

关注实际问题:

  

是否可以将函数作为参数传递

是。使用AddressOf TheMethod将方法传递给另一个方法。参数类型必须是其签名与目标方法的签名匹配的委托。在方法内部,您将参数视为实际方法。例如:

Sub Foo()
    Console.WriteLine("Foo!")
End Sub

Sub Bar()
    Console.WriteLine("Bar!")
End Sub

Sub CallSomething(f As Action)
    f()
End Sub

' … somewhere:
CallSomething(AddressOf Foo)
CallSomething(AddressOf Bar)

正如我所说,实际参数类型取决于您想要传递的方法的签名。使用Action(Of T)Func(Of T)或自定义委托类型。

但是,在许多情况下,实际上使用接口而不是委托是合适的,让不同的类实现您的接口,并将这些不同类的对象传递给您的方法。

答案 1 :(得分:6)

将您的参数声明为Func(Of T)Action(Of T)

您应该使用哪一个取决于您的方法签名。如果你给我们一个,我可以给你更准确的答案。

答案 2 :(得分:3)

您还可以使用delegate,以便传递具有特定签名的函数/ subs。