有没有办法在事先不知道方法的情况下将方法作为参数传递?
可以Func<input, return>
在不知道方法的参数/返回类型的情况下调用吗?
您可以使用的最接近的方法是Delegate
调用者需要选择正确的委托类型。这正是Control.Invoke
使用Delegate
而不是特定委托类型的原因。
或者,MethodInfo
正如 HackedByChinese 所建议的那样。您应该使用哪一个取决于您要达到的目标 - 每个在不同的情况下都很有用。如果您试图描述一种方法,那么MethodInfo
可能是最好的方法。如果您试图表示某种可调用操作(可以接受参数并具有返回值),那么委托可能更有用。
如果您告诉我们更多关于您想要实现的目标,我们可能会为您提供更多帮助。
听起来通过反射调用方法将是您感兴趣的。
请参阅MethodInfo。
似乎您可能在这里过度工程。您应该正确查看代码中的周围基础设施,并尝试对其进行重构。
但如果你真的需要,你可以用泛型来做。现在,我不推荐这个——但是这个函数你可以用任何东西调用,你必须定义 Y 和 T 以及调用时间。
public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param)
{
return func(param);
}
但请注意——泛型会给你带来各种不同的问题;)
您需要使用委托来执行此操作。Stackoverflow 上有几篇文章涵盖了这一点。
我建议这个,特别是 Jon Skeet 的回答