【问题标题】:Pass method as param via expression通过表达式将方法作为参数传递
【发布时间】:2016-08-21 07:47:31
【问题描述】:

我需要能够将我的类(或基类)的方法传递给基类方法(因为它必须在那里做更多的事情)。

我知道以下可能性:在我的基类中,我有 public void Call(Action action) 方法,它将简单地调用 action() 并执行其他操作。

但我不想限制更多,因为现在我可以把所有东西都放在这个方法中,例如Call(() => string.Format("Some {0}, "text)); 但我只想允许自己类型或基类型的方法。

我想到了public void Call(Expression<Func<MyClassType, Action>> expressionToAction) 之类的东西,但我在这里不明白。

这甚至可能吗?使用表达式参数,我得到了该方法必须返回 Action 的错误,这完全不是我想要的。

【问题讨论】:

  • 基类中的简单虚方法如何,被子类型中的具体实现覆盖?
  • Func<X, Action> 不保证任何关于返回的Action。你实际上想达到什么目的?如果你提供一个具体的例子来说明你为什么要这样做,也许一开始就有更好的方法来做到这一点。

标签: c# generics reflection expression invoke


【解决方案1】:

您无法在编译时实现“仅此类的方法”。没有任何限制可以让您对泛型和非泛型类型执行此操作。

如果运行时检查足够 - 传递一个表达式(使用 Action 而不是 Func - Expression<Action<T>)并检查类似于 Get the name of a method using an expression 的表达式主体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多