我动态加载程序集为:
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");
请注意,编译器只在尝试编译时抱怨。我没有任何语法错误。
答案 0 :(得分:2)
可以从MethodInfo
对象创建委托,但是强制转换是不够的。
相反,请使用Delegate.CreateDelegate()
:
MethodInfo myMethodFilter = assembly.GetType("DyamicClass").GetMethod("Filter");
FilterDelegate myPointerToMethodFilter = (FilterDelegate)Delegate.CreateDelegate(typeof (FilterDelegate), myMethodFilter);