C# 反射 方法 带参数是(委托型)
方法 (委托 )
{
委托1= 委托
}
object[] obj= new object [] { Messagecallback};//Messagecallback() 是写的一个方法 与委托 定义参数一样
return t.InvokeMember(name, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, obj);
提示错误信息:
Error 5 Cannot convert method group 'MessageCallBack' to non-delegate type 'object'. Did you intend to invoke the method?
namespace AppModels
{
public class p_number
{
public int first_number { get; set; }
public int next_number { get; set; }
public int last_number { get; set; }
}
}
namespace AppModels_Calculate
{
public class Calculate
{
public string message { get; set; }
public int Add(AppModels.p_number p)
{
message = "无委托的方法";
return p.first_number + p.next_number + p.last_number;
}
public int Add(AppModels.p_number p, Func p2)
{
message = "带委托的方法";
var p_add = p.first_number + p.next_number + p.last_number;
var p2_add = p2(p_add);
return p2_add;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
AppModels.p_number pv = new AppModels.p_number() { first_number = 15, last_number = 35, next_number = 25 };
var ass = System.Reflection.Assembly.Load("AppModels_Calculate");//加载程序集
Type ass_tp = ass.GetType("AppModels_Calculate.Calculate");//类名
var ass_obj = Activator.CreateInstance(ass_tp);//实例化
var methodnames = ass_tp.GetMethods();//获取方法集合
var methodname1 = "Int32 Add(AppModels.p_number, System.Func`2[System.Int32,System.Int32])";//带func的方法
var methodname2 = "Int32 Add(AppModels.p_number)";//不带func的方法
object[] objparams1 = { pv, (Func<int, int>)(calcu_add) };
object[] objparams2 = { pv};
object result1 , result2, result3, result4;
foreach (var item in methodnames)
{
if (item.ToString() == methodname1)
{////带func的方法
System.Reflection.MethodInfo method = item;
result1 = method.Invoke(ass_obj, objparams1);
result3 = ass_tp.GetProperty("message").GetValue(ass_obj, null);
}
if (item.ToString() == methodname2)
{////不带func的方法
System.Reflection.MethodInfo method = item;
result2 = method.Invoke(ass_obj, objparams2);
result4 = ass_tp.GetProperty("message").GetValue(ass_obj, null);
}
}
}
public int calcu_add(int m)
{
return m + 1006;
}