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);
}
浙公网安备 33010602011771号