委托事件

委托声明实例化调用

 委托是一个类型,大部分情况声明的和类同级别。偶尔会嵌套在类内部。

delegate string OneRetOnePar(string p_Name);

#region 简单委托
OneRetOnePar ornp = new OneRetOnePar(u.GetUserName);
Console.WriteLine(ornp("藏锋"));
#endregion
View Code

委托可以认为是一个具有相同参数返回值的方法地址集合,返回最后一个方法的返回值。

多播委托

委托可以进行

 +=

-+(匿名方法减不掉)

维护一个方法列表

不能begininvok()异步调用

委托作用和意义

 delegate委托是一个关键字,他编译之后生成的类型继承了MulticastDelegate,而MulticastDelegate继承了类型Delegate.

委托里面放的是一个方法列表。就是说,可以把逻辑放在委托里面,作为参数参数。实现上下端分离。下端不是面向具体的业务,而是一套通用的框架处理。

 1、异步多线程,都是基于委托的。

3、封装 扩展 解耦,因为委托是一个类型,用的时候实例化成一个对象,   把一段逻辑封装到已给变量里面,可以把逻辑作为参数传递,达到逻辑拆分,具有扩展性(下端不要写死,上单定制逻辑)。也可以可以达到解耦的作用。最常见的就是linq   where()里面的条件逻辑(委托),

2、多播委托(不能异步)

包含了三个方法,基类为多波委托

异步三个参数  第一个为方法参数 第二个为回调函数(可为NULL)  第三个为状态(可为NULL)

观察者模式

 事件发布者(就是事件所在的类)

订户(具体的操作方法)

订阅(把方法绑定到事件上的动作叫做订阅)

事件

 事件是委托的一个实例

委托是一个类型

从图上可以看出,事件是在委托委托前面加了一个event。

event只能由声明event的类调用(添加了控制权限)。event关键字控制了委托实例的权限

中间语言中事件会自动生成两个方法,来操控委托 

 

代码下载

posted @ 2017-09-02 14:39  西伯利亚的狼  阅读(244)  评论(0编辑  收藏  举报