码迷,mamicode.com
首页 > 其他好文 > 详细

委托事件

时间:2017-09-02 15:42:16      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:解耦   closed   user   tee   ring   href   .com   mil   订阅   

委托声明实例化调用

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

技术分享
delegate string OneRetOnePar(string p_Name);

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

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

多播委托

委托可以进行

 +=

-+(匿名方法减不掉)

维护一个方法列表

不能begininvok()异步调用

委托作用和意义

 委托是一个关键字,但是他是一个类型,因为他编译之后生成的类型继承了MulticastDelegate

技术分享

技术分享

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

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

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

技术分享

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

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

观察者模式

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

订户(具体的操作方法)

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

事件

 事件是委托的一个实例

委托是一个类型

技术分享

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

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

技术分享

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

 

代码下载

委托事件

标签:解耦   closed   user   tee   ring   href   .com   mil   订阅   

原文地址:http://www.cnblogs.com/wudequn/p/6733085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!