1.一般反射方法:
Type type= Type.GetType("FullClassName"); MethodInfo methodInfo =type.GetMethod("MethedNam"); object[] parameters; foreach (var p in listPara) { parameters[i] = p; i++; } try { object o = Activator.CreateInstance(type); return methodInfo.Invoke(o, parameters ).ToString(); } catch (Exception) { return string.Empty; } /// T Get<T>() ///{string interfaceName = typeof(T).Name; /// T temp = (T)Assembly.Load("Dal").CreateInstance("DAL" + "." + interfaceName.Substring(1, interfaceName.Length - 1)) ///}
Express的compile方法
public Func<object, object[], object> GetDelegate()
{
Expression<Func<object, object[], object>> exp = (instance, parameters) =>
((ClassName)instance).Method(parameters[0], parameters[1]);
return exp.Compile();
}
Emit: 代码片段
internal static SetHandler CreateSetHandler(Type type, PropertyInfo propertyInfo) { MethodInfo setMethodInfo = propertyInfo.GetSetMethod(true); DynamicMethod dynamicSet = CreateSetDynamicMethod(type); ILGenerator setGenerator = dynamicSet.GetILGenerator(); setGenerator.Emit(OpCodes.Ldarg_0); setGenerator.Emit(OpCodes.Ldarg_1); UnboxIfNeeded(setMethodInfo.GetParameters()[0].ParameterType, setGenerator); setGenerator.Emit(OpCodes.Call, setMethodInfo); setGenerator.Emit(OpCodes.Ret); return (SetHandler)dynamicSet.CreateDelegate(typeof(SetHandler)); } private static DynamicMethod CreateSetDynamicMethod(Type type) { return new DynamicMethod("DynamicSet", typeof(void), new Type[] { typeof(object), typeof(object) }, type, true); }