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

本文关键字:分配 Action 对象 方法 何使用 反射 获取 | 更新日期: 2023-09-27 18:35:13

>我有一个图表,我有一个带有节点的树视图,当选择时会显示各种图表。 树视图节点命名为 xxxChart,显示各种图表的方法以调用它的节点命名为 xxxChart。

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

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

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

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

依靠方法命名约定和反射不是很健壮,但要直接回答您的问题,您可以使用 Delegate.CreateDelegate 的重载之一。

例如

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