说说我对委托的理解
在写代码的过程中每个人多多少少都会碰到委托.虽然并不是特别常用,但是却非常重要.
我们来分析下委托是什么.
举个小例子:
重要活动接待员:您好,检票,请出示门票
我:哎呀妈呀,票没带,我这猪脑子.
我:还有半小时,得叫人找个送过来啊.不然凉了..
我:喂,姐,我房间桌上有个活动门票忘带了,帮我找个快递小哥半小时内把送门票送过来啊,半小时内啊,来不及了,十万火急..
姐姐:半小时..
姐姐: 脑袋炸裂的你姐姐,帮你寻找快递小哥中....
等待28分钟后,满头大汗的快递小哥吧门票送到你面前.
我:好险啊..终于进来了
=================================================================================================================分割线
在上面的例子中,因为我忘记带门票,导致无法入场,最后由姐姐帮忙找到(骑车,奔跑很快)的快递小哥 ,完成了的半小时内送门票的任务
先记住用颜色标记的3个关键字 姐姐 ,快递小哥 ,半小时内送门票的任务
如果在代码中我们要如何描述上面的整个事件过程呢,看看下面的代码
首先定义了半小时内送门票的任务(门票肯定是必须的,还得要骑车很快,奔跑贼快的快递小哥才行啊)
是不是很眼熟, 我们来 一个单词一个词的来分析上面要完成的任务:
delegate 定义这是一个自己完成不了的任务 (一个你和姐姐都完成不了的任务 ,你姐不够快啊!!)
void 收到门票后的答复,可以是void 无答复,也可以是需要其他各种类型的答复(string,int,class,委托类型)
OverSMP 给半小时内送门票任务取个名字
string MP 你的门票(委托的要求)
FKXG fKXG 跑的飞快的小哥(委托的要求)
接下来应该要找能完成任务的快递个公司了吧.(嗯,不错,你姐找到2个有跑的飞快小哥员工的快递公司)
快递小哥长这样.真的挺快的:
2个快递公司给出了快速配送方案,很符合送门票的事情
接下来要把任务给到快递公司了,给谁呢,你姐选择了快递公司xiaoming的公司.
(这里需要注意,你姐姐sister只是个OverSMP委托的实例化变量,你姐姐怎么干的了呢,她只是变量可以指向很多快递公司+=, -=,最终她指向了xiaoming快递小哥的公司方案 ,快递公司接到指令,执行了自己的方案,这点很重要,姐姐是变量只是承载,指向而已)
这里就很好的说明了为什么委托和c++函数指针很像,但是委托是安全的,有强(固定)类型,GC自动回收垃圾,C++函数指针无法直接回收,所以不太安全)
看到这里委托已经露出了他的全部面目,再看看下图加深理解.
委托总结:
委托就是方法的模板,需要达成条件的方法才能指向委托,并且委托自己执行不了
需要一个变量(存储并指向符合条件的方法),最后调用的是人是变量(姐姐角色)传入参数执行所有指向的真实方法.