C#方法作为参数

时间:2012-05-15 12:56:13

标签: c#

有没有办法在不事先了解方法的情况下将方法作为参数传递?

可以在不知道方法参数/返回类型的情况下调用Func<input, return>吗?

4 个答案:

答案 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);
    }

但要注意 - 泛型可以给你各种不同的问题;)