【问题标题】:How can I point a delegate to a method obtained with reflection如何将委托指向通过反射获得的方法
【发布时间】:2012-09-11 15:59:44
【问题描述】:

我将程序集动态加载为:

 var assembly = Assembly.LoadFile("PathOFMyDll");

无论如何,该程序集在类DynamicClass 中都有静态方法Filter。因此,一旦我拥有该程序集,我就会执行该方法:

 var filter = assembly.GetType("DyamicClass").GetMethod("Filter");

 // that method accepts a object as parameter
 filter.Invoke(null, new object[] { "test" });

现在我的问题是:

我有委托 delegate bool FilterDelegate(object item); 为什么不可能让该类型的委托指向该方法以便拥有:

 FilterDelegate myPointerToMethodFilter = (FilterDelegate)assembly.GetType("DyamicClass").GetMethod("Filter");
 bool result = myPointerToMethodFilter("test");

注意编译器只会在尝试编译时报错。我没有收到任何语法错误。

【问题讨论】:

    标签: c# reflection delegates


    【解决方案1】:

    可以从MethodInfo 对象创建委托,但强制转换是不够的。

    改为使用Delegate.CreateDelegate():

    MethodInfo myMethodFilter = assembly.GetType("DyamicClass").GetMethod("Filter");
    FilterDelegate myPointerToMethodFilter = (FilterDelegate)Delegate.CreateDelegate(typeof (FilterDelegate), myMethodFilter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多