【发布时间】:2013-04-02 14:47:48
【问题描述】:
我需要能够将任意方法传递给某个函数myFunction:
void myFunction(AnyFunc func) { ... }
应该可以使用其他静态、实例、公共或私有方法甚至委托来执行它:
myFunction(SomeClass.PublicStaticMethod);
myFunction(SomeObject.PrivateInstanceMethod);
myFunction(delegate(int x) { return 5*x; });
传递的方法可以有任意数量的参数和任意返回类型。还应该可以通过反射了解myFunction 中参数的实际数量及其类型。 myFunction 定义中的 AnyFunc 是什么来满足此类要求?可以有多个 myFunction 的重载版本。
【问题讨论】:
-
如果方法有参数,你希望传递什么?听起来您应该将任何方法转换为无参数/无效返回(又名
Action),然后再将其传递给此方法。 -
myFunction将分析函数的参数,根据一些外部数据库检查它们并使用必要的值调用它,如果在数据库中没有找到匹配的条目,则调用它。 -
这是一个非常令人担忧的设计,您实际上将代码视为数据。您应该考虑尝试重新设计它,使您的代码是静态的。
-
是的。将嵌入一个编译器,该编译器将从数据构造代码。我知道安全风险,但这是我们项目中需要的。
-
@Hi-Angel 处理已知签名的方法。拥有一个接受字符串并返回特定类型结果的未知函数,而不知道它的实现,这当然不是糟糕的设计。
标签: c# delegates argument-passing