委托:把事情托付给别人或别的机构办理
这就是委托,我只负责结果,我不管实现
在C#开发中使用场景有:
1.自己使用委托书写代码,方便一次性调用n个函数
2.自己委托别人,我只需要有这个委托实例,别人拿去完成就行
你和小老弟A负责做模块,你做UI他做功能
你很快完成了UI的搭建然后上分去了,告诉A把各个按钮的功能做好
然后小老弟A趁你上分就如下完成功能
按钮1:打开摄像头,打开扬声器(对应Func1,2)
按钮2:播放《小苹果》,登陆贴吧(对应Func3,4)
按钮3:一键清除回收站,删除空文件夹(对应Func5,6)
A通过写了三个函数
Func1 Func2 Func3完成了功能
当然了如果A聪明一点会写成Func1-Func6 ,现在我们就假设他写了这六个函数吧
所以几天后,你和A把功能完成了交给老板皆大欢喜
再之后几天A辞职了,你负责这块功能
之后的某天
老板告诉你一天内加个按钮4,按钮5,按钮6
(在老板眼里这些功能都是实现过的,一天足够了)
按钮4:点击后按钮2实际功能变成 播放《青花瓷》
按钮5:点击后按钮3实际功能变成 登陆今日头条
按钮6:点击后按钮1实际功能变成 触发按钮2
一般思路:
点击按钮4后修改按钮2的逻辑,
改变绑定按钮2的点击触发函数
本来点击触发Onclick_2():Func3(“小苹果“),Func4(“今日头条“)
点击按钮4后按钮2绑定的触发变成Onclick_2_1():Func3(“青花瓷“)
点击按钮5后按钮3绑定的触发变成Onclick_3()_1:Func4(“今日头条”)
但是到按钮6按钮事件就变得复杂起来,你可能是播放《小苹果》,登陆贴吧
也可能因为按钮4和按钮5的原因,变成播放《青花瓷》,登陆今日头条
点击按钮6就需要四种情况!!!甚至还要加上判断语句!!!
这时候你就会想是不是可以简化
委托的好处就来了
很简单声明三个委托:Btn1Handler Btn2Handler Btn3Handler
Onclick_1()只需要调用委托Btn1Handler.Invoke()
Onclick_2()只需要调用委托Btn2Handler.Invoke()
Onclick_3()只需要调用委托Btn3Handler.Invoke()
按钮4的操作:Btn2Handler = null; Btn2Handler+=Func3(“青花瓷”)
按钮5的操作:Btn3Handler = null; Btn2Handler+=Func4(“今日头条”)
按钮6的操作:Btn1Handler = null; Btn1Handler+= Btn2Handler
还记得一开始说过的委托就是不管实现,只管结果吗,你在Func1()中调用了Btn1Handler
之后你就可以不用管这个Handler干了什么,你需要知道Btn1Handler会替你完成操作就对了
非常类似你的老板,但是很高效,一天就完成了需求不是吗:)
通俗易懂,渐入佳境。