NET委托、事件及应用(胡立辉)管理资料_第1页
NET委托、事件及应用(胡立辉)管理资料_第2页
NET委托、事件及应用(胡立辉)管理资料_第3页
NET委托、事件及应用(胡立辉)管理资料_第4页
NET委托、事件及应用(胡立辉)管理资料_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.NET委托、事件及应用兼谈项目开发胡立辉 计通学院软件研究所2008年10月羹樊希郭钢贝谚婿疮阉驻闪库引卿状妹殊酥痔沧瀑吓鞘仔杯宠覆攫桐豆鞠NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)主要内容.NET委托.NET委托应用.NET事件.NET事件应用软件工程开发浅谈琼涛倡赣纺科盲啤瓷抓笋靛断斤洋检甫包施襟嘉这卷司绘揍壕绣塔劫闻叹NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉).NET委托类型(clss)具有相同属性和方法的对象抽象委托类型(delegte)具有相同函数属性(签名)的抽象,关键字为delegte,是.NET新的特殊类型概念委托类型声明类似C#函

2、数(方法)声明,需要确定返回类型、参数及类型池渡柏舰超痛允纠希浓宰碰杭秽午戴乌乳晒汇历僧琴蟹绳墟衍老惫跺贿豪NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉).NET委托声明及特点2) 计算1k+2k+nk的委托 delegte int PowerSum(int n)委托类型名函数签名函数签名1) 通用事件处理者委托 delegte void EventHndler (object sender, Eventrgs e)3) 特点:不需要定义成员4) 基类:MulticstDelegte、Delegte咋妹洱头砖煽界栅胡九娘酱滴语亿脊京邑狰簇滚嗣爸哄奖资企氮袒惯橱颗NET委托、事

3、件及应用(胡立辉)NET委托、事件及应用(胡立辉).NET委托揭秘遵祝斤编穴汇政孰赢厉赖伊晤艾岩吁绚远吴麦休骆惧析认游姥烽厕阂氧丫NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)委托概念是一种类型平安的方法引用,可以把它看成一个类型平安的C函数指针?.NET组件编程?Juvl Lowy要把方法传送给其它方法时需要委托。与C函数指针不同,.NET委托类型平安?C#高级编程?Christin Ngel.NET 通过委托向外提供一种函数回调机制(包括类事件机制)?框架设计(第2版)?Jeffrey Richeter阉椅挪密泰篇切洞盖稀绕碟簿凡港亚舍县异初酉宠间示有努匈簧减蓝熬括NET

4、委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)委托举例1: 委托推断方式int SqureSum(int n) / 计算 1 到 n 的数字平方的和 int CubeSum(int n) / 计算 1 到 n 的数字立方的和 int GetPowerSum(PowerSum ps) return ps(10); int p2 = GetPowerSum(SqureSum);int p3 = GetPowerSum(CubeSum);绊两胸擞甜所掌竭忙辫彰钞番团持梨私佃断坤己剥胀戚昭苟认寇突瘁医怜NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)委托举例2: 委托对象方

5、式PowerSum ps2;ps2 = new PowerSum(SqureSum);PowerSum ps3;ps3 = new PowerSum(CubeSum);int p2 = ps2(10);int p3 = ps3(10);六管褐摸伞锣京蜂屁伦讲闯孕濒垮服序啤锅柯胺勤便卉撑搓因懈啸惕炮弱NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)委托应用:函数回调(Callback)定时器类型System.Threding.Timer()System.Threding.TimerCllbck(object obj) / 委托定时回调TimerCllbck cb = new Ti

6、meCllbck(TimeClick);Timer timer = new Timer(cb, null, 0, 500);void TimeClick(object stte) Console.WriteLine(“time click); 函数签名委托参数委托参数寒迈讨厩减船寂闪沈讳蹭扦柯机矿幼楚冒鸿强董婿帽戴酣黔搬霸湃拿黄笔NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)匿名委托、委托推断与泛型委托匿名委托:在委托()中内联方式创立方法TimerCllBck cb = new TimerCllbck ( delegte(object stte) Console.Write

7、Line(“time click); );委托推断:不创立委托对象,直接调用函数泛型委托:委托是类,同样可以有泛型枕延献程仅假孕瑚艰拯传甭罐淄搂藻岔唇釜布篙请劣教厩诗驾灶舷辑侵盎NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)事件概念(1)如何获得另一个对象发生某个事件的通知?VB按钮(Commnd)点击事件Sub Commnd1_Click()C#按钮(Button)点击事件void button1_Click(object sender, Eventrgs e)事件是一种信号机制,是对象定义的外发消息接口,对象在发生某种活动时激发并通知其它对象,所有注册在该事件上的处理程序

8、都会被调用假设对事件感兴趣,那么为该事件注册一个事件处理程序耙笨游臭稽迄葬诺好思昏婆佐阮憾辩趁喳店瓣邹谣揣神踊戴替蹈州晋夜去NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)事件概念(2)发布事件的对象称为发布者(publisher)或事件源,发布事件也称为激发(fire)事件关注事件的对象称为事件接收器(sinker)或订阅者(subscriber),订阅事件也称为注册事件方法发布者调用订阅者的注册方法.NET事件模型建立在委托机制之上,支持事件定义、发布、订阅和撤除汁讯哩甩龄晋剧派座侗篡忿霖唆丙揍册替颧诚砧射肾讶崎瓷械壤詹向漓拔NET委托、事件及应用(胡立辉)NET委托、事件

9、及应用(胡立辉)设计.NET事件(5步)定义参数类型:从类型Eventrgs派生出满足要求的事件参数类型定义事件处理者委托:泛型委托时可省定义事件成员:在类中,由事件处理者委托定义一个或多个事件成员激发事件:在类的引发事件的方法中,通知该事件的所有订阅者订阅事件:其它对象注册事件处理程序白农葵坛宿瓮欧遭家丹漓郎踊佩嚣塑山橡案睬烫赁铀挥期楔咙掖东斧笼挎NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)约定:参数类型与委托模式public clss Eventrgs public sttic redonly Eventrgs Empty;delegte void EventHndle

10、r(object sender, Eventrgs e)调用:bnYes_Click(this, Event.Empty);事件发布者 this参数类型挖俞膘痒赃好资把喂焦言责裁先旱超铜祝隘剧粘寞指酵坊串络沙胎揉扒殊NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)事件应用举例统计按键次数的侦听类TKeyListenTKeyListen可以发布侦听到的击键次数,并检查返回参数值注册事件的对象可以终止侦听循环类似应用发现系统的登录者,通知控制台捕获到非法入侵者,通知管理者接收到Socket包,发布相关信息殃创伐氛饯纲岁畔饶戌宝掘国君垂鸥娄鞭喳犀权江慢蔗丑春途蛾炼侄顺篓NET委托、事

11、件及应用(胡立辉)NET委托、事件及应用(胡立辉)第1步:定义事件参数类型public clss KeyEventrgs: Eventrgsprivte chr m_KeyCount; / 按键记数 privte bool m_Stop = flse; / 终止标记public KeyEventrgs(keyCount) public int KeyCount get public bool Stopget return m_Stop;set m_Stop = vlue; / 订阅者可改瑰绞酋冷外蔗俏咒发押绞辞角岔仆拿汹纤演萨幌黑环鳃并晦材添萨潮汹陡NET委托、事件及应用(胡立辉)NET委托、

12、事件及应用(胡立辉)第2步:声明事件处理者委托delegte void KeyEventHndler(object sender, KeyEventrgs e)泛型委托:EventHndler可以省略事件委托声明,用于事件定义只能用于事件委托标准模式:第一个参数是object,第二个是Eventrgs派生类 黔神谬馁幼驾辩禹笨过代数瞄近裴陀蓬秋赏撞闲呼痢耳峨舍多擒螺句室渤NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)第3步:声明类事件public clss TKeyListenpublic event KeyEventHndler KeyPress;public event

13、EventHndler KeyPress;泛型方式:可省略委托类定义铭遁王禽柔蝶潭栏搬佣逗沫怨膏籽燎珊尚鸭殖煌胜凡炒唁羹嫉远立屯索师NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)第4步:发布(激发)事件while (true)ConsoleKeyInfo key = Console.RedKey(); keyCount+;if (KeyPress != null) / 存在订阅者(委托链非空)KeyEventrgs e = new KeyEventrgs(keyCount);KeyPress(this, e); / 激发事件,通知所有订阅者 if (e.Stop) brek;

14、 / 判断参数1)遍历订阅事件链表2)调用订阅事件方法分引诵以厉纂断但犀卧否皇育痒剖瘁舰零据涸电函眶森悬库奄簿簧充塌做NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)发布事件说明必须判断委托链是否空if (KeyPress != null) / 存在订阅者第一参数是对象自己(this)KeyPress(this, e); / 调用所有订阅者方法可以判断事件返回参数KeyEventrgs e = new KeyEventrgs()KeyPress(this, e);if (e.Stop) brek;最后订阅者给的值爵帆兆君蜘棕鸥估茨撩凄废混迟奶堆诸统愉杰胖桶墩哲凑析糯轴蒜鞋溺孪N

15、ET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)第5步:订阅事件sttic void Min(string rgs)TKeyListen demo = new TKeyListen();demo.KeyPress += CountKey; / 订阅事件demo.Listen();sttic void CountKey(object sender, KeyEventrgs e)Console.WriteLine(Press count: + e.KeyCount);if (e.KeyCount = 5) e.Stop = true; / 5次后停止与事件委托一致径私续瑞涉筋谴沤考盘

16、扼嚼励奢韩渴晌畸智教靡姜厂泄个沏巩吠恿域畸且NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)事件订阅说明订阅操作+=:添加订阅方法-=:移除订阅方法委托对象或委托推断demo.KeyPress += CountKey;demo.KeyPress += new KeyEventHndler();可以屡次订阅demo.KeyPress += delegte() ;可能是泛型方式屑茂踩彤拥朗犬薄解粗睬焰斋六庞也谓姜课材狗熊奋汰咯魁讶忧妈跟诅抢NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)内容小结委托是方法的类型委托调用有对象和推断方式匿名委托与匿名方法泛型委托Eve

17、ntHndler事件建立在委托根底之上事件设计5步及本卷须知外发消息回调与事件方法调用剩余熊臆妓伊慷掘捡酗支咆抡根窟捻尧趁揣义粉挽缮还渠滇罗淤没阜励恨NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)深入学习委托链或多播委托(MulticstDelegte)委托对象链表、一次调用全链委托协变和逆变协变:方法返回类型派生于委托返回类型逆变:方法参数类型是委托参数类型的基类委托与异步(编程)调用委托定义编译后的Begin、End方法事件访问器event第二种语法:dd、remove分布式与异步事件喉筹乐植夹驱刽问邪恰滓造欺窄五泥撞坯垃夹秃撒佃天田冀艳零约魂深霖NET委托、事件及应用(胡立辉)NET委托、事件及应用(胡立辉)软件工程开发浅谈开发文档技术文档:库表设计、关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论