大白话系列之C#委托与事件讲解(三)

大白话系列之C#委托与事件讲解(三)

ID:40641343

大小:52.99 KB

页数:7页

时间:2019-08-05

大白话系列之C#委托与事件讲解(三)_第1页
大白话系列之C#委托与事件讲解(三)_第2页
大白话系列之C#委托与事件讲解(三)_第3页
大白话系列之C#委托与事件讲解(三)_第4页
大白话系列之C#委托与事件讲解(三)_第5页
资源描述:

《大白话系列之C#委托与事件讲解(三)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、大白话系列之C#委托与事件讲解(三)[我希望大家在看完文章的时候,多做做练习,自己也可以想个场景,动动手,这样才会有深刻的印象,不然遗忘的速度非常快]今天我接着上面的3篇文章来讲一下,为什么我们在日常的编程活动中遇到这么多sender,EventArgse参数:protectedvoidPage_Load(objectsender,EventArgse){}protectedvoidbtnSearch_Click(objectsender,ImageClickEventArgse){}protectedvoidgrdBill_RowDataBound(objectsender,Gri

2、dViewRowEventArgse){}那他们到底表示什么呢?在回答上面的问题之前,我们先搞懂.NetFramework的编码规范:一、委托类型的名称都应该以EventHandler结束。二、委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object类型,一个EventArgs类型(或继承自EventArgs)。三、事件的命名为委托去掉EventHandler之后剩余的部分。四、继承自EventArgs的类型应该以EventArgs结尾。这就是微软编码的规范,当然这不仅仅是规则,而是在这种规则下使程序有更大的灵活性,那我们就继续重构第三讲的例子,让他符合微软的规范。

3、代码//所有订阅者【Subscriber】感兴趣的对象,也就是e,都要继承微软的EventArgs//本例中订阅者【也称观察者】MrMing,MrZhang他们感兴趣的e对象,就是杂志【magazine】publicclassPubEventArgs:EventArgs{publicreadonlystringmagazineName;publicPubEventArgs(){}publicPubEventArgs(stringmagazineName){this.magazineName=magazineName;}}//发布者(Publiser)publicclassPublis

4、her{//声明一个出版的委托//这里多了一个参数sender,它所代表的就是Subject,也就是监视对象,本例中就是PublisherpublicdelegatevoidPublishEventHander(objectsender,PubEventArgse);//在委托的机制下我们建立以个出版事件publiceventPublishEventHanderPublish;//声明一个可重写的OnPublish的保护函数protectedvirtualvoidOnPublish(PubEventArgse){if(Publish!=null){//Sender=this,也就是P

5、ublisherthis.Publish(this,e);}}//事件必须要在方法里去触发publicvoidissue(stringmagazineName){OnPublish(newPubEventArgs(magazineName));}}//Subscriber订阅者publicclassMrMing{//对事件感兴趣的事情publicstaticvoidReceive(objectsender,PubEventArgse){Console.WriteLine("嘎嘎,我已经收到最新一期的《"+e.magazineName+"》啦!!");}}publicclassMrZh

6、ang{//对事件感兴趣的事情publicstaticvoidReceive(objectsender,PubEventArgse){Console.WriteLine("幼稚,这么大了,还看《火影忍者》,SB小明!");Console.WriteLine("这个我定的《"+e.magazineName+"》,哇哈哈!");}}classStory{publicstaticvoidMain(string[]args){//实例化一个出版社Publisherpublisher=newPublisher();Console.Write("请输入要发行的杂志:");stringname=C

7、onsole.ReadLine();if(name=="火影忍者"){//给这个出火影忍者的事件注册感兴趣的订阅者,此例中是小明publisher.Publish+=newPublisher.PublishEventHander(MrMing.Receive);//发布者在这里触发出版火影忍者的事件publisher.issue("火影忍者");}else{//给这个出火影忍者的事件注册感兴趣的订阅者,此例中是小明[另一种事件注册方式]publisher.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。