代码之家  ›  专栏  ›  技术社区  ›  caesay

从加载到接口中的程序集运行动态void

  •  1
  • caesay  · 技术社区  · 14 年前

    因此,我将一个程序集加载到接口中,它工作得很好:

    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[] { });
    

    我走对了吗?请引导我:)

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Tomas Petricek    14 年前

    如果要使用反射,则代码中缺少的部分是:

     MethodInfo meth = plug.GetType().GetMethod("Execute");
     meth.Invoke(plug, new object[] { }); 
    

    的第一个参数 Invoke 方法应该是要对其调用方法的实例。这是必需的,因为 meth 只是方法的抽象描述(并且不与任何实例关联)。如果要在多个实例上调用该方法(可以缓存 甲基 价值)。

    如果您使用的是C 4.0,那么您可以使用新的 dynamic 功能(假设“执行”是一个不更改的名称):

    dynamic plugDynamic = plug;
    plugDynamic.Execute( /* arguments */ );
    

    如果变量声明为 动态 在C 4.0中,然后您可以调用任何您想要的方法,方法解析将在运行时完成(类似于反射,但更复杂,效率更高)。