【发布时间】:2013-07-12 14:01:38
【问题描述】:
我有一个类,它有一个采用委托参数的方法,它可以通过反射来调用,例如:
namespace NSa
{
public delegate void dlg(string p1, string p2);
public class dyn
{
void method(dlg d)
{
// call d...
}
}
}
在另一个类中,我需要通过反射调用dyn.method:
namespace NSa
{
public delegate void dlg(string p1, string p2);
public void fun(string a, string b) { Console.Write(a); }
public class other
{
void caller_method()
{
dlg x = fun;
//...
var assembly = System.Reflection.Assembly.LoadFile("xx.dll");
System.Reflection.BindingFlags flags = (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
System.Reflection.Module[] dynModules = assembly.GetModules();
Type dynType = dynModules[0].GetType("NSa.dyn");
object dynObj = Activator.CreateInstance(dynType);
System.Reflection.MethodInfo dynMethod = dynType.GetMethods(flags).Where(m => m.Name == "method").First();
dynMethod.Invoke(dynObj, new object[] {x});
}
}
}
我得到异常:
Object of type 'NSa.dlg' cannot be converted to type 'NSa.dlg'.
我错过了什么?
【问题讨论】:
-
对未来问题的一点建议 - 如果代码遵循相关语言的正常命名约定,避免缩写,并使用
using指令而不是完全限定每个输入名称。
标签: c# reflection delegates