委托
一.什么是委托
IL层面
1>委托的本质就是一个类
2>继承自System.MulticastDelegate
3>委托里面内置了3个方法:Invoke(),BeginInvoke(),EndInvoke()
二.委托的三个步骤
1>public delegate void MyDelegate();//1.委托的声明
2>MyDelegate myDelegate = new MyDelegate(DoSomething);//2.委托的实例化(构造函数传方法)
3>myDelegate.Invoke();//3.实例调用(Invok调用),这里等于执行了这个方法
myDelegate();//3.直接调用也和上面一行代码是一样的
三.委托的3大意义
1>解耦:
-好处是减少重复代码;
-解耦是解除了判断逻辑和共用逻辑之间的耦合;
-委托传递的是逻辑(逻辑就是方法);
2>异步多线程
3>多播委托
-+=为委托实例按顺序增加方法,形成方法链,Invok()时按顺序执行
--=为委托实例移除方法,从方法链的尾部开始匹配,遇到第一个完全吻合的移除,且只移除一个;没有的也不异常
-多播委托带返回值,结果以最后的为准
-价值:一个变量保存多个方法,可以增减方法;Invok时候可顺序执行
事件
一.什么是事件
1>说白了,就是带event关键字的委托实例
2>事件可以限制变量外部调用,或者直接赋值
3>事件可以把一堆的动作或行为,封装出去,交给第三方指定
4>程序设计时候:
-固定部分,可以写死
-不固定部分,通过一个事件去开放接口,外部可以扩展动作
二.委托和事件的区别和联系
1>委托是一个类型,一个类,事件是委托的实例
2>比如委托时一个Student类,事件是“小明”实例