如何使用反射来获取方法并分配给Action对象?

时间:2012-05-25 04:37:51

标签: c# reflection

我有一个图表,我有一个带有节点的树视图,当选择它们时会显示各种图表。树视图节点名为xxxChart,在调用它的任何节点之后,调出各种图表的方法都被命名为xxxChart。

有些参数可以更改(例如开始/结束日期),当发生这种情况时,我需要再次运行当前图表的方法,使用更新的参数选择来刷新它。我认为最好有一个名为DisplayChart的Action对象,只要选择了一个节点就会设置它。然后当参数改变时我只需调用DisplayChart()。

现在,我欢迎您提出更好的模式来解决这个问题,但我的问题是:我如何使用反射来获取可以分配给Action对象的内容?我知道如何使用反射调用方法,但是当选择一个节点时,我只想在DisplayChart Action对象中存储名称与该节点匹配的方法。

当然,我知道我可以使用一个MethodInfo对象而不是一个Action对象,然后使用反射来调用该方法,但我仍然很好奇如何这样做。

1 个答案:

答案 0 :(得分:3)

依赖于方法命名约定和反射不是很强大,但为了直接回答您的问题,您可以使用Delegate.CreateDelegate.

的重载之一

E.g。

object boundObject = ...
MethodInfo method = ...

Action action = (Action)Delegate.CreateDelegate(typeof(Action), 
                                                boundObject, 
                                                method);