我有一个类可以对 excel 文件执行许多类似但不同的读/写操作。所有这些操作都在单独的函数中定义。它们都必须包含在同一个长代码块中(检查和打开文件、保存、关闭等的代码)。什么是不必每次都复制此代码的合理方法?问题是,在执行每个方法的不同代码之前,我不能只包含一个方法包含所有共享代码,因为该代码必须包含在共享代码的 if、try 和 for 语句的多个层中。
是否可以将函数作为参数传递,然后在共享代码中运行该函数?或者有没有更好的方法来处理这个?
我有一个类可以对 excel 文件执行许多类似但不同的读/写操作。所有这些操作都在单独的函数中定义。它们都必须包含在同一个长代码块中(检查和打开文件、保存、关闭等的代码)。什么是不必每次都复制此代码的合理方法?问题是,在执行每个方法的不同代码之前,我不能只包含一个方法包含所有共享代码,因为该代码必须包含在共享代码的 if、try 和 for 语句的多个层中。
是否可以将函数作为参数传递,然后在共享代码中运行该函数?或者有没有更好的方法来处理这个?
关注实际问题:
是否可以将函数作为参数传递
是的。用于将方法传递给另一个方法。参数类型必须是其签名与目标方法的签名匹配的委托。在方法内部,您将参数视为实际方法。例子: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)
或自定义委托类型。
但是,在许多情况下,使用接口而不是委托实际上是合适的,让不同的类实现您的接口,并将这些不同类的对象传递给您的方法。
将您的参数声明为Func(Of T)
or Action(Of T)
。
您应该使用哪一个取决于您的方法签名。如果你给我们一个,我可以给你更准确的答案。
您还可以使用委托,以便您可以传递具有特定签名的函数/子程序。