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