第4章接口委托与事件_第1页
第4章接口委托与事件_第2页
第4章接口委托与事件_第3页
第4章接口委托与事件_第4页
第4章接口委托与事件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

教育部普通高等教育十二五国家级规划教材

《C#程序设计教程》第3版

第4章接口委托与事件2Ch4接口委托与事件4.1接口4.2委托4.3事件34.1接口接口的用途表示调用者和设计者的一种约定;接口的作用和抽象类的作用相似,接口是完全抽象的成员集合。抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用的功能。接口和抽象类选择因素抽象类:创建不同版本的组件或实现通用的功能,设计大的功能单元接口:创建的功能在大范围的完全不同的对象之间使用,设计小而简练的功能块4.1.1接口的声明和实现接口只包含成员的声明部分,而没有实现部分。接口可以包含方法、属性、事件和索引器。interface关键字声明一个接口,接口名称一般用大写的“I”开头。[访问修饰符]interface接口名称{

接口体}实现接口成员的类中对应的成员必须是公开的、非静态的,并且与接口成员有相同的名称和签名。【例4-1】演示接口的声明与实现。44.1.2显式方式实现接口显式实现接口由于不同接口中的成员可重名,一个类中实现接口中的成员时可能会存在多义性的问题。使用注意实现接口方法的形式“接口名.方法名”。“显式接口成员的实现”只能通过接口实例来访问。【例4-2】演示如何以显式方式实现接口。54.1.3利用接口实现多继承C#继承的方式:类继承:实现单一继承接口继承:实现多重继承。接口可以继承其他接口,语法为[访问修饰符]interface接口名称

:被继承的接口列表{

接口体}【例4-3】演示如何利用接口实现多继承。64.2委

托委托类型(delegatetype)类似C++语言中指向函数的指针委托既可以指向静态方法,还可指向实例的方法。委托是完全面向对象的技术,无内存泄露情况。委托特点任何类或对象中的方法都可以通过委托来调用,将方法作为参数传递。要求方法的参数类型和返回类型要与委托的参数类型和返回类型完全匹配。74.2委

托委托使用的一般步骤1.定义委托类型2.定义委托要调用的方法,方法必须和委托具有相同的签名。3.创建委托类型的实例,指向要执行的方法通过new初始化时指定通过“=”、“+=”运算符指定4.使用委托实例,执行调用方法注意委托只能执行与其参数、返回值都匹配的方法;84.2.1定义委托类型定义委托的一般语法[访问修饰符]delegate返回类型

委托名([参数序列]);委托定义时,没有方法体,具体执行的方法是在使用委托时动态指定的;委托编译时,生成一个新类,继承自Systems.Delegate类;例如:定义了一个名为MyFunction的委托publicdelegatedoubleMyFunction(doublex);

编译器编译这行代码时,会自动为其生成一个继承自System.Delegate的类型,类型的名称为MyFunction。9委托举例1、委托声明publicdelegateintCalc(inti,intj);2、定义被调用的方法classB{publicintAdd(inti,intj)

{Console.WriteLine("{0}+{1}={2}",i,j,i+j);returni+j;

}publicintSub(inti,intj)

{Console.WriteLine("{0}-{1}={2}",i,j,i-j);returni-j;

}}3、委托对象的创建和使用(1)仅执行一个方法Bbb=newB();Calccal=newCalc(bb.Add);Console.WriteLine(cal(1,2));(2)执行多个方法Bbb=newB();Calccal=newCalc(bb.Add);cal+=bb.Sub;cal(1,2);4.2.2通过委托调用方法定义了委托类型后,就可以像使用其他类型一样使用委托。通过委托,可将方法作为实体赋值给变量,也可以将方法作为委托的参数来传递。例:将f作为参数,f为自定义的委托类型MyFunction:publicstaticdouble[]Apply(double[]a,MyFunctionf){double[]result=newdouble[a.Length];for(inti=0;i<a.Length;i++)result[i]=f(a[i]);returnresult;}114.2.2通过委托调用方法对下面的静态方法:publicstaticdoubleSquare(doublex){returnx*x;}

可将静态的Square方法作为MyFunction类型的参数传递给Apply方法:double[]a={0.0,0.5,1.0};double[]squares=Apply(a,Square);【例4-4】演示委托的基本用法。124.3事

件事件(event)事件是一种使类或对象能够提供通知的成员,事件是利用委托来实现的。一般利用事件响应用户的鼠标或键盘操作,或者自动执行某个与事件关联的行为。要在应用程序中使用事件,必须提供一个事件处理程序(事件处理方法),以便与事件关联的委托能自动调用它。134.3.1事件的声明和引发事件的声明和引发的使用步骤:1、声明事件前,先定义一个委托。例:publicdelegatevoidMyEventHandler()2、定义委托后,就可以用event关键字声明事件,例如:publiceventMyEventHandlerHandler;3、定义引发该事件时要调用的方法,如:publicvoidOnHandler(){Handler();}4、定义事件触发后要执行的方法。如:

publicvoidMyMethod(){…}144.3.1事件的声明和引发5、实例化事件所在类的对象,然后通过“+

=

”和“−

=

”运算符向事件添加委托来注册或取消对应的事件。例如:myEvent.Handler+=new

MyEventHandler(myEvent.MyMethod);myEvent.Handler−=new

MyEventHandler(myEvent.MyMethod);6、引发事件,执行事件处理程序,如:myEvent.OnHandler();154.3.1事件的声明和引发【例4-5】演示事件的基本用法。164.3.2具有标准签名的事件标准签名的事件中,事件处理程序包含两个参数:第1个参数是Object类型,表示引发事件的对象;第2个参数是从EventArgs类型派生的类型,用于保存事件数据标准签名的事件的用法,.NET框架提供了以下委托:EventHandler委托,用于不包含事件数据的事件publicdele

温馨提示

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

评论

0/150

提交评论