因此,我将一个程序集加载到接口中,它工作得很好:
MarshalByRefObject pluginObject = ... ecko.Plugins.Interface.Plugin plug = pluginObject as ecko.Plugins.Interface.Plugin;
但是,尽管我在接口中有很多方法,但我必须执行动态的方法,并根据接口中的信息来确定这些方法。所以基本上,我需要调用不在接口中的方法,直到最后一分钟我才知道的名称。
这是我尝试的方法(以“执行”方法为例):
plug.GetType().GetMethod("Execute").Invoke((what-the-hell-do-i-put-here), new object[] { });
我走对了吗?请引导我:)
谢谢。
如果要使用反射,则代码中缺少的部分是:
MethodInfo meth = plug.GetType().GetMethod("Execute"); meth.Invoke(plug, new object[] { });
的第一个参数 Invoke 方法应该是要对其调用方法的实例。这是必需的,因为 meth 只是方法的抽象描述(并且不与任何实例关联)。如果要在多个实例上调用该方法(可以缓存 甲基 价值)。
Invoke
meth
甲基
如果您使用的是C 4.0,那么您可以使用新的 dynamic 功能(假设“执行”是一个不更改的名称):
dynamic
dynamic plugDynamic = plug; plugDynamic.Execute( /* arguments */ );
如果变量声明为 动态 在C 4.0中,然后您可以调用任何您想要的方法,方法解析将在运行时完成(类似于反射,但更复杂,效率更高)。
动态