




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第1章委托和事件,1,目标,本章学习目标:,使用Delegate类控制组件间的交互,使用Event语句、EventHandler委托和EventArgs类控制组件间的交互,2,第1章委托和事件,委托事件小结实验习题,3,委托:多态(方法的多态),委托是引用类型,这与类和接口相似。,4,间接调用方法,使用Delegate类间接调用方法,使用委托的步骤:,步骤1:声明委托。,步骤2:创建类,创建委托调用的方法。步骤3:调用委托,进而调用指向的方法。,5,委托的广播,单路广播:一个委托,只指向一个方法多路广播:一个委托,指向多个方法累加+=,减法-=,注意:一般不使用返回值,如果有返回值,以最后一个调用的方法为准,如果希望得到指向几个方法,使用GetInvocationList方法,6,委托:方法的指针,通过调用委托,就能调用方法(一到多个),定义的语法,创建委托:构造函数调用(有返回,和无返回)广播:语法:+=,-=,使用委托VS抽象类,接口区别,7,Delegate类的成员,Delegate类的成员,成员,描述,Method属性,返回委托引用的方法的只读属性。如果委托引用了多个方法,则,Method属性将返回委托的调用列表中的最后一个方法。,Target属性,返回包含委托引用的方法的对象的只读属性。如果方法是静态的,则返回的值为null。如果委托引用了多个方法,则Target属性将返回包含调用列表中最后一个方法的对象。,Combine方法,将委托数组的调用列表串连在一起的静态方法。可使用该方法将多个委托的调用列表组合到一个委托中。,CreateDelegate方法可用来创建引用实例或静态(VB.NET中为共享)方法的委托的静态方,法。,8,Delegate类的成员(续),续表:,DynamicInvoke方法GetInvocationList方法,该方法调用委托的调用列表中的方法。被调用的方法的参数以数组的形式传递。如果委托不使用参数,则参数数组应为Null。,该方法返回一个单路广播委托数组,表示当前委托的调用列表。如果委托只引用一个方法,则该数组将仅包含一个引用其自身的元素。如果委托为多路广播,则该数组包含多个元素。,Remove方法,将指定委托的调用列表的最后一个实例从另一个委托中移除的静态方法。,RemoveAll方法,将指定委托的调用列表的所有实例从另一个委托中移除的静态方法。,9,增强委托行为,使用新的C#2.0技术增强委托行为,C#2.0对委托的语言进行了某些增强,引入了匿名方法、协变和逆变。,匿名方法*协变,逆变,10,匿名方法,能够省略参数列表,意味着可以将匿名方法转换为带有各种签名的委托。,要将代码块传递为委托参数,创建匿名方法则是唯一的方法。,通过使用匿名方法,由于不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。,button1.Click+=delegate(System.Objecto,System.EventArgse)System.Windows.Forms.MessageBox.Show(Click!);,delegatevoidDel(intx);,Deld=delegate(intk),System.Windows.Forms.MessageBox.Show(k.ToString();,11,协变:允许方法具有的派生返回类型比委托中定义的更多,classMammals,staticvoidMain(),HandlerMethodhandler1=FirstHandler;,classDogs:Mammals,HandlerMethodhandler2=SecondHandler;,classProgram,publicdelegateMammalsHandlerMethod();,publicstaticMammalsFirstHandler(),returnnull;,publicstaticDogsSecondHandler(),returnnull;,12,逆变:允许方法具有的派生参数类型比委托类型中的更少,classMammal,classDog:Mammal,classProgram,publicdelegatevoidHandlerMethod(DogsampleDog);,publicstaticvoidFirstHandler(Mammalelephant),publicstaticvoidSecondHandler(DogsheepDog),staticvoidMain(stringargs),HandlerMethodhandler1=FirstHandler;,HandlerMethodhandler2=SecondHandler;,13,第1章委托和事件,委托事件小结实验习题,14,事件Event,使用事件的好处,事件的工作方式,使用Event语句创建事件EventHandler委托的实现方法自定义事件参数类,事件和委托的关系,15,使用事件的好处,.NETFramework通常会在对象发生某些情况时自动引发预构建的事件作为响应。,当用户在UI中单击自定义控件时,该控件就会触发Click事件。,16,事件的工作方式,在程序中创建并使用自定义事件包含三个步骤:,首先,必须在类中声明事件并确定将要使用的委托和参数。其次,必须定义在触发事件时要调用的委托。,最后,必须设计事件参数类,该参数类的实例会将信息传递给被调用的方法。,17,使用Event语句创建事件,.NETFramework提供Event语句,可以在需要创建自定义事件时使用该语句。,使用C#实现,在C#中,始终使用委托签名声明事件,但是也可使用诸如EventHandler等预定义的委托或具有特定签名的自定义委托。,18,气球小孩,最大容积,充气(int体积)爆炸:事件,玩具气球,打气,听到爆炸(事件处理程序),1.定义处理事件的委托,2.在类内部定义事件,指定事件处理的委托类型3.在类内部在适当的时候触发事件,4.在类外部(也可以在内部)注册类的事件处理程序,19,EventHandler委托的实现,C#,要在C#中预订事件处理程序,可使用AdditionAssignment运算符(+=)将方法添加到分配给事件的EventHandler委托中。,20,人,血压,吃肉:血压+5;中风:事件,老婆:处理该人的中风事件:掐人中路人甲:处理该人的中风:呼叫120,21,自定义事件参数类,可以使用继承自EventArgs的类将参数传递给处理事件的方法。,每当想要将来自事件发布者的特定数据传递给预订者方法时,就必须使用继承自EventArgs基类的自定义类。,如果想要允许来自事件处理程序的反馈,可以提供一个可读/写的属性。,22,事件和委托的关系,事件和委托的使用流程,23,第1章委托和事件,委托事件小结实验习题,24,小结,本章主要介绍了.NETFramework的委托和事件。,.NETFramework使用委托来实现事件驱动机制。委托是一个方法列表,调用委托的效果等同于调用此列表中所有的方法。事件可以看成是特殊的委托实例。,25,第1章委托和事件,委托事件小结实验习题,26,实验,1.小猫会叫,老鼠听到会跑开,主人听到会醒过来2.狗也会叫,小偷听到就逃走,主人听到就起来查看是否失窃,27,第1章委托和事件,委托事件小结实验习题,28,习题,1.你最近已阅读了有关在面向对象的编程中使用委托的资料,经理要求你对其他编程人员作个讲解。因此要创建一个有关委托的优点列表以说服其他编程人员使用委托,那么你打算向列表中添加使用委托的哪些优点?,请选择所有符合条件的答案。,A委托允许将方法作为参数传递给其他方法B委托有助于更改方法的签名,C委托有助于一次调用多个方法D委托有助于在异步编程中指定回调,29,习题(续),2.你正在创建允许用户构建自定义图形用户界面(GUI)的程序。你必须能对派生自Control类的各类自定义控件的实例进行排序。Control类继承于System.Object类。以下哪个委托和方法签名正确使用了协变和逆变?,请选择一个最佳答案。,A,C#,publicdelegateobjectSortObjects(objectobjA,objectobjB);publiccontrolSortObjects(controlobjA,controlobjB);,30,习题(续),B,C#,publicdelegatecontrolSortObjects(controlobjA,controlobjB);publicobjectSortObjects(objectobjA,objectobjB);,C,C#,publicdelegatecontrolSortObjects(objectobjA,objectobjB);publicobjectSortObjects(controlobjA,controlobjB);,31,习题(续),D,C#,publicdelegateobjectSortObjects(controlobjA,_controlobjB);publiccontrolSortObjects(objectobjA,objectobjB);,32,习题,3.EventHandler类的预定义对象使用两个标准参数。以下哪些选项表示这些参数的类型?,请选择所有符合条件的答案。AControl,BObject,CEventArgs,D.Sender,33,习题,4.若要通过使用EventArgs类将数据从事件发布,者发送到事件的预订者,你将如何操作?,请选择一个最佳答案。,A创建一个继承自System.EventArgs的自定义EventArgs类,并将新类作为自定义EventHandler委托声明的第二个参数的类型包含在声明中,B扩展事件发布者的类以包含作为类的属性的,数据,C扩展事件预订者的类以包含作为类的属性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版钻孔施工合同合同终止条件范本
- 2025年版包装设计制作合同范本模板
- 2025版影视作品播放使用权转让合同规范
- 2025年度水利工程土石方工程发包运输全面服务管理合同
- 2025年度企业招聘与配置策略顾问聘请服务合同
- 2025版在线教育平台第三方代付课程费用合同
- 2025年度智能家居配件采购与系统集成合同
- 2025版全新医药企业并购保密协议范本下载
- 2025年承包田地农业资源保护与利用合同
- 2025年艺术品展览档口租赁与艺术品交易合同
- 学校食堂从业人员食品安全知识培训考试试题(含答案)
- 电影艺术概述-设计艺术-人文社科-专业资料
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 医院药品采购与质量控制规范
- 支部纪检委员课件
- 从+“心”+出发遇见更好的自己-开学第一课暨心理健康教育主题班会-2025-2026学年高中主题班会
- 2025版仓储库房租赁合同范本(含合同生效条件)
- 2025年人伤保险理赔试题及答案
- 2025年全国招标采购专业技能大赛(央企组)历年参考题库含答案详解(5卷)
- 2025年苏教版新教材数学二年级上册教学计划(含进度表)
- 美林时钟的自我救赎
评论
0/150
提交评论