我想动态创建一些方法,它将接受单个参数 - 类A的实例,然后将在传递的A实例中执行方法B. B的参数类型为int。因此,这里的模式:Reflection.Emit动态创建方法
dynamicMethod(A a){
a.B(12);
}
这里是我的尝试:
DynamicMethod method = new DynamicMethod(string.Empty, typeof(void), new[] { typeof(A) }, typeof(Program));
MethodInfo methodB = typeof(A).GetMethod("B", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { }, null);
ILGenerator gen = method.GetILGenerator();
gen.Emit(OpCodes.Nop);
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldarg_S, 100);
gen.Emit(OpCodes.Call, methodB);
但是编译器告诉我,CLR没有找到方法。你能帮我吗?
您可以考虑使用'System.Linq.Expressions'来代替编译表达式树。这很容易。 – 2009-09-06 03:09:15