版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章接口、委托和事件【本章导读】 本章内容接口、委托和事件是面向对象程序设计中较深和较难的部分,各位在学习的过程中要结合前后部分的知识细细体会。9.1接口在软件开发过程中,有时我们编写的程序需要提供给外部商家进行二次开发或者其它的服务,但我们又不希望他们看见我们程序的内部细节,在此情况下,我们可以把我们的产品做成组件,用接口描述组件对外提供的服务。组件和组件之间、组件和客户之间都通过接口进行交互,所以接口在软件设计过程中还是一个很重要的知识。9.1.1接口的含义接口(interface) 用来定义一种程序的协定。实现接口的类与接口的定义严格一致。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。所以接口不能被实例。9.1.2定义接口
定义接口使用的关键字为interface,其一般形式为:[修饰符]interface接口名称[:基接口列表]{ 接口体成员列表}其中,允许使用的修饰符有:public、protected、internal、private。在一个接口定义中同一修饰符不允许出现多次,new修饰符只能出现在嵌套接口中,表示覆盖了继承而来的同名成员。public,protected,internal,andprivate修饰符定义了对接口的访问权限。9.1.2定义接口【实作任务】例9.1定义一个客车类的接口,该接口向外提供一个此车重量、车牌号的接口和一个输出车相关信息方法的接口
interfaceIPasstrain{intWeight{get;set;}stringPlate{get;set;}voidShowinfo();}9.1.3实现接口
【实作任务】实现接口IPasstrain
classPasstrain:IPasstrain//类名为Passtrain(客车){ //以下实现接口中的Weight属性 publicintWeight { get{returnweight;}//提供对weight的读权限 set{weight=value;}//提供对weight的写权限 } //以下实现接口中的Plate属性 publicstringPlate { get{returnplate;}//提供对plate的读权限 set{plate=value;}//提供对plate的写权限 } //以下实现接口中的Showinfo方法 publicvoidShowinfo() { System.Console.WriteLine("我是客车"); System.Console.WriteLine("我的重量是:"+Weight); }}9.1.3实现接口测试代码classTest{staticvoidMain(){IPasstrainp=newPasstrain();p.Weight=1000;p.Showinfo();}}运行结果9.2委托委托是C#中的一种引用类型,主要用于.NETFramework中的事件处理程序和回调函数。一个委托可以看作一个特殊的类,因而它的定义可以像常规类一样放在同样的位置。与其他类一样,委托必须先定义以后,再实例化。9.2委托委托派生于基类System.Delegate,不过委托的定义和常规类的定义方法不太一样。委托的定义通过关键字delegate来定义:publicdelegateintmyDelegate(intx,inty);代码定义了一个新委托,它可以封装任何返回为int,带有两个int类型参数的方法。9.2委托步骤2:实例委托实例publicintsub(intx,inty){Console.WriteLine(x+y);}myDelegatecal=newmyDelegate(sub);cal(10,3);步骤1:定义方法步骤3:可以直接使用cal调用sub方法可通过以下步骤使用定义的委托9.2委托委托可以使用+运算符号将多个委托组合在一起,或使用–运算符号从组合委托中减去一个委托。参考:publicintfub(intx,inty){Console.WriteLine(x-y);}myDelegatemyd=newmyDelegate(fub);//再定义一个委托实例myd(10,3);//利用委托实例调用fub方法myDelegatezong=cal+myd;//定义委托zong(10,3);//此时再调用此时输出: 13 79.3事件事件是什么?为什么要学习事件?
我们在第二篇的学习时已经接触过很多事件了,比如窗体加载、按钮点击、鼠标双击等等,这些事件都是.NET封装和集成好,且通过事件面板可以很方便的添加到程序中的,但是否知道其中运行机制,我想很多同学都还不是很清楚,这都需要进一步的学习,而且象我们目前解决的客车超速时要警示驾驶员这样的事件在.NET中也是没有现成的,很多情况下都还需要我们自己定义事件。
9.3事件事件的定义用关键字event声明,不过声明事件之前必须存在一个委托(这个委托一般根据编制的事件编写):publicdelegatevoidEventHandler(objectsender,EventArgse);然后定义事件:publiceventEventHandlerOnEventHandler;9.3事件若存在事件处理程序:publicvoidbuttonCreate_Click(objectsender,EventArgse){Console.Write("事件代码被触发");}可用下面代码将事件处理程序和事件联系起来:OnEventHandler+=newEventHandler(buttonCreate_Click);9.3事件【多学一点】事件参数事件处理程序一般接收两个参数,一个为object,表明发送事件的源,一个为EventArgs,表明事件发生时向事件处理程序传递的参数,这两个类型都是.NET自带的,但是这不是必须的,只是程序员一般在编写事件的时候都设置这两个参数。9.3事件【实作任务】设计程序,当客车速度超过设定时速时触发相应事件从而警示驾驶员客车超速。classPasstrain//类名为Passtrain(客车){publicstaticfloatSMAX=100;//静态公有字段,最大时速privatefloatnowv;//客车的当前时速字段//定义事件的委托publicdelegatevoidChangedEventHandler(objectsender,EventArgse);//定义一个事件publiceventChangedEventHandlerChanged;//用以触发Change事件protectedvirtualvoidOnChanged(EventArgse){if(this.Changed!=null)this.Changed(this,e);}9.3事件 //客车的当前时速属性 publicfloatNowv{ get{returnnowv;} set{nowv=value; //时速改变时触发Change事件 this.OnChanged(newEventArgs()); }}}classProgram{staticvoidMain(string[]args){Passtrainpss=newPasstrain();//将事件处理程序添加到事件的调用列表中(即事件布线)pss.Changed+=newPasstrain.ChangedEventHandler(NowV_Changed);//设置属性值,触发相应的事件pss.Nowv=80;pss.Nowv=120;Console.Read();}//对Change事件处理的程序privatestaticvoidNowV_Changed(objectsender,EventArgse){ if(((Passtrain)sender).Nowv<Passtrain.SMAX) Console.WriteLine("客车时速在正常范围内!"); else Console.WriteLine("客车时速太大,危险!");}}9.3事件解析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人教版小学数学下册第4单元同步练习题及答案
- 2026港口自动化装卸设备渗透率与航运效率提升关联报告
- 2026年浙江省杭州市第二中学八年级物理第11章电路测试卷及答案
- 2026年人教版高中数学高一上册第3单元函数性质测试卷及答案
- 2026中国自动驾驶高精地图市场准入与商业模式研究报告
- 2026-2027学年高二数学上学期第一次月考数学试卷01
- 2026年hcia考试题目及答案
- 2026年flash试题完整版及答案
- 多元工作风格兼容机制
- 2026年CRRT 抗凝方案制定试卷及答案
- 成人高考专升本2025年考试《政治》真题试卷(含答案)
- 2026中国动力电池梯次利用商业模式与残值评估研究报告
- 6.5美丽中国加快建设 课件 (共32张)+内嵌视频 统编版道德与法治9年级上册
- 健康管理数字化平台的建设及推广计划
- 古诗文默写训练与答题策略
- 汇编mips考试试题及答案
- 青岛华通集团招聘笔试题
- 箱涵预制、安装、现浇施工方案
- CNAS-TRC-002-2009 管理体系两阶段审核的合理性安排和实施
- 糖尿病母亲婴儿(DM婴儿)的临床管理与预后关键要点解析
- 谈傣族民间舞蹈的风格特征和文化阐释
评论
0/150
提交评论