如何将委托指向使用反射获得的方法

时间:2012-09-11 15:59:44

标签: c# reflection delegates

我动态加载程序集为:

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

无论如何,程序集在类Filter中具有静态方法DynamicClass。所以,一旦我有了那个程序集,我就会执行该方法:

 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");

请注意,编译器只在尝试编译时抱怨。我没有任何语法错误。

1 个答案:

答案 0 :(得分:2)

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

相反,请使用Delegate.CreateDelegate()

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