自定义类
MYCLASS
{
public delegate void DelegateLoginMethod); //声明了一个Delegate Type
public DelegateLoginMethod _delegateLoginMethod;
function1();
function2();
....
}
在主窗体中, 我将 WebSitesLoginAndReqestClass 类中方法 绑定在 下拉 框comboBox1中
Type ht = typeof(MYCLASS);
MethodInfo[] mif = ht.GetMethods(BindingFlags.DeclaredOnly|BindingFlags.Instance|BindingFlags.Public);
foreach (MethodInfo mf in mif)
{
comboBox1.Items.Add(mf.Name);
}
我想达到 这样的效果,,comboBox1变化选择目标的时候
MYCLASS类中的delegate 动态加载 MYCLASS类中 的函数
目前我是这样做的...
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string strFunction = comboBox1.selectitem.tostring();
MYCLASS logicClass = new MYCLASS();
MYCLASS._delegateLoginMethod += new MYCLASS.DelegateLoginMethod(
上面这句写不下去了...求解...
}
------解决思路----------------------
反射获取Method,然后Invoke
var person = new Person();
var method = person.GetType().GetMethod("");
person.delegateLoginMethod += () =>
{
method.Invoke(person, null);
};
public class Person
{
public delegate void DelegateLoginMethod();
public DelegateLoginMethod delegateLoginMethod;
}
------解决思路----------------------
反射获取Method,然后Invoke
------解决思路----------------------
楼主的想法是可行的,需要注意一些问题
如果MYCLASS只是定义在方法中,那方法结束后选择的结果不就消失了么.
选择的结果如果是字符串,应该根据该字符串重新获取对应的方法加入到委托中.
还要考虑多次选择后,是否委托中允许加入多个方法,同个方法是否可加入多次.
------解决思路----------------------
要进行所谓的”动态加载委托执行方法,也就是这样写
if (selectValue == "1")
{
person.delegateLoginMethod += e =>
{
function1(e);
};
}
else if (selectValue == "2")
{
person.delegateLoginMethod += e =>
{
function2(e);
};
}
或者简写为
if (selectValue == "1")
{
person.delegateLoginMethod += function1;
}
else if (selectValue == "2")
{
person.delegateLoginMethod += function2;
}
任何适配于 delegateLoginMethod 事件接口形式的方法都可以使用。包括你可以写
person.delegateLoginMethod += person.function3;也就是再次去调用 person的某个方法。用不着什么反射。
------解决思路----------------------
MYCLASS._delegateLoginMethod += new MYCLASS.DelegateLoginMethod((a, b) => 你反射的方法.Invoke(new object[] { a, b}) )