通过表达式

时间:2016-08-21 07:47:31

标签: c# generics reflection expression invoke

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

我知道以下可能性:在我的基类中,我使用方法public void Call(Action action),只需调用action()并执行其他操作。

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

我想像public void Call(Expression<Func<MyClassType, Action>> expressionToAction)之类的东西,但我在这里没有得到正确的观点。

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

1 个答案:

答案 0 :(得分:1)

在编译时,您无法实现“此类的唯一方法”。没有任何限制可以让你在泛型和非泛型类型上做到这一点。

如果运行时检查已足够 - 传递表达式(使用Action而非Func - Expression<Action<T>)并检查表达式的正文Get the name of a method using an expression