Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
//...
ILGenerator ctorIL = smth.GetILGenerator();
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Call, objCtor);
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Ldarg_1);
ctorIL.Emit(OpCodes.Stfld, xField);
//...
public static Action MakeCall<TClass, TArg>(TClass instance, string name)
{
var instanceExpr = Expression.Constant(instance);
var param = Expression.Parameter(typeof (TArg), "arg");
var call = Expression.Call(instanceExpr, name, Type.EmptyTypes, param);
var expr = Expression.Lambda<Action>(call,param).Compile();
return expr;
}
использовать:
var method = typeof (B).GetMethod("DoWork");
method.Invoke(b, "xxx");
var b = new B();
var expr = MakeCall<B,string>(b, "DoWork");
expr("xxx");
Динамические вызовы: сравнение методов