如何理解委托呢?
这就好比在一个公司里,一位员工想要获取你手中的一些绝密资料,当然你肯定不会轻易拿出来了。于是那位员工就找到你们共同的领导,说服他从你手中拿到那份绝密资料,最终你妥协了,交出了那份资料,那位员工使用的就是委托方法。
定义委托
委托(Delegate) 是对某个方法的引用的一种引用类型变量。(太绕口了,还是分步开始操作吧!)
第一步,委托声明
这是需要根据要执行的方法的参数、返回值等确定窗体中某个控件的固定名称,委托的参数和返回值必须为空!就像是上面那个员工只是找个固定的借口来声明那份绝密资料对于他和领导来说都是必须的,不需要什么附加条件和必然结果,但首先得找个借口声明一下。
委托声明:public delegate void SetFormTextDelegate();
第二步,创建委托对象
面向对象编程,一切皆为对象。这就和类的使用及其类似,调用某个类就必须创建这个类的对象,委托也必须要创建委托对象。就像上面那个员工必须要找到管的着你的领导进行委托才能拿到那份绝密资料。
委托对象创建:private SetFormTextDelegate SetFormText;
第三步,创建委托方法
有了委托对象就得通过委托对象的方法进行工作。还是拿上面的例子,领导找你要绝密资料总得有点什么方法吧!总不能坐在那你自己就送货上门啦!比如领导随便找你一个“小辫子”......
委托方法创建:
private void ExcuteMethod()
{
this.Text = "绝密资料获取方法!";
}
第四步,委托绑定
有了对象也有了方法,那就得把这个方法和这个对象进行绑定,那这个对象就获得了这个方法。领导为了找到你的小辫子总得从人事部或者其它地方将这个小辫子拿到手里,方便他随时动手。
委托绑定:
this.SetFormText = ExcuteMethod;
第五步,委托调用
一切准备就绪,任何方法和对象都可以调用这个委托以实现这个委托的方法。也就是说不管是你的同事找到领导还是别人找到领导,领导都可以用同一个方法获取你手中的绝密资料。
委托调用:
private void ThreadMethod()
{
//调用委托
SetFormText();
}
至此,委托就全部完成了。
随着微软VS平台的不断强大,委托的使用也不断简化了,譬如用Lamda表达式代替方法
所以以上五步委托法可以简化为以下步骤
private void ThreadMethod()
{
//创建委托、绑定委托、调用委托
this.Invoke(new Action(()=>
{
this.Text = "绝密资料获取方法!";
}));
}