7

我需要能够将任意方法传递给某个函数myFunction

void myFunction(AnyFunc func) { ... }

应该可以使用其他静态、实例、公共或私有方法甚至委托来执行它:

myFunction(SomeClass.PublicStaticMethod);
myFunction(SomeObject.PrivateInstanceMethod);
myFunction(delegate(int x) { return 5*x; });

传递的方法可以有任意数量的参数和任何返回类型。还应该可以myFunction通过反射了解参数的实际数量及其类型。满足这些要求AnyFunc的定义是什么?myFunction有几个重载版本是可以接受的myFunction

4

2 回答 2

6

Delegate类型是所有其他委托类型的超类型:

void myFunction(Delegate func) { ... }

然后,func.Method将为您提供一个MethodInfo可用于检查返回类型和参数类型的对象。

调用该函数时,您必须明确指定要创建的委托类型:

myFunction((Func<int, int>) delegate (int x) { return 5 * x; });

对您要在更高级别上完成的工作有所了解会很好,因为这种方法可能并不理想。

于 2013-04-10T16:25:54.377 回答
0

让方法接受一个Delegate,而不是一个特定的委托:

void myFunction(Delegate func)
{

}
于 2013-04-10T16:25:44.053 回答