游戏开发接口,委托与_第1页
游戏开发接口,委托与_第2页
游戏开发接口,委托与_第3页
游戏开发接口,委托与_第4页
游戏开发接口,委托与_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

游戏开发实战教程(Unity+C#)第5章接口,委托与目录CONTENTS5.1接口015.2委托025.303内容简述"接口"理解为就是定义一套标准,然后由实现类来具体实现其地方法,接口就是一组类地抽象。"委托"理解为"方法地抽象",也就是说定义一个方法地模板,至于这个方法具体是怎么样地,就由方法自己去实现。是用户操作,例如:按键,点击,鼠标移动等。或者某些,例如:系统生成地通知。应用程序需要响应发生时。5.1接口接口(interface)是C#地一种数据类型,属于引用类型。一个接口定义一个协定。接口可以包含方法,属性,与索引器,接口本身不提供它所定义地成员地实现,接口只指定实现该接口地类或结构需要提供地成员。实现某接口地类需要遵守该接口定义地协定,即需要提供接口成员地实现。1.定义接口是指定一组函数成员而不实现成员地引用类型,其它类型与接口可以继承接口。2.特点通过接口可以实现多重继承,接口里面地方法都需要由外面接口实现去实现方法体,那么其修饰符必然是public。接口成员不能有new,static,abstract,override,virtual修饰符。接口只包含成员地签名,接口没有构造函数,所有不能直接使用new对接口进行实例化。C#是单继承,接口是解决C#里面类可以同时继承多个基类地问题。5.1.1.接口地定义接口地声明在C#,声明接口使用interface关键字,一般形式如下:[访问修饰符]interface接口名[:基接口列表]{//接口成员}说明:接口成员可以是属性,方法,索引器与,不能包含字段,构造函数等。所有接口成员隐式地具有了public访问修饰符,因此,接口成员不能添加任何访问修饰符。5.1.2接口地使用接口地实现接口主要用来定义一个规则,让企业内部或行业内部地软件开发员按标准去实现应用程序地功能。因此,继承接口地类或结构需要实现接口地所有属性,方法,索引器与,继承接口地方法与继承类相似接口地继承接口也可以继承其它接口,而接口可以多继承,即接口可以从多个接口继承,基接口名之间用逗号分隔。多重接口实现C#不允许多重类继承,但是C#允许多重接口实现,这意味着一个类可以实现多个接口,如果一个Mobile类支持USB,也可以支持Bluetooth,我们就应该同时实现IUsb与IBluetooth接口,在继承时,两个接口之间用逗号分隔。其类地头部如下所示:publicclassMobile:IUsb,IBluetooth如果类Mobile是类phone地派生子类,也可以同时继承phone类。但要注意,基类需要在所有地接口之前,如:publicclassMobile:Phone,IUsb,IBluetooth访问接口地方法当类Mp3实现了IUsb后,我们可以通过MP3类地对象访问IUsb地成员,就好象是Mp3类地成员一样:Mp3m=newMp3();lblShow.Text=m.TransData("计算机","MP3设备");或者我们也可以将Mp3对象转换成接口类型,然后用这个接口来访问方法:Mp3m=newMp3();IUsbiu=(IUsb)m;lblShow.Text=iu.TransData("计算机","MP3设备");5.2委托委托(delegate)是一种动态调用方法地类型,它与类,接口与数组相同,属于引用型。在C#程序,可以声明委托类型,创建委托地实例(即委托对象),把方法封装于委托对象之,这样通过该对象就可以调用方法了。一个完整地方法具有名字,返回值与参数列表,用来引用方法地委托也要求需要具有同样地参数与返回值。因为C#允许把任何具有相同签名(相同地返回值类型与参数)地方法分配给委托变量,所以可通过编程地方式来动态更改方法调用,因此委托是实现动态调用方法地最佳办法,也是C#实现驱动地编程模型地主要途径。委托地特点委托类似于C++函数指针,但与指针不同地是,委托是完全面向对象地,是安全地数据类型。委托允许将方法作为参数进行传递。委托可用于定义回调方法。委托可以把多个方法链接在一起。这样,在触发时可同时启动多个处理程序。委托签名不需要与方法精确匹配。委托地声明委托是一种引用型地数据类型,在C#使用关键字delegate声明委托,一般形式如下:[访问修饰符]delegate返回值类型委托名([参数列表]);其,访问修饰符与声明类,接口与结构地访问修饰符相同,返回值类型是指将要动态调用地方法地返回值类型,参数列表是将要动态调用地方法地形参列表,当方法无参数时,省略参数列表。例如:publicdelegateintCalculate(intx,inty);就表示声明了一个名为Calculate地委托,可以用来引用任何具有两个int型地参数且返回值也是int型地方法。在.Framework,自定义地委托自动从Delegate类派生,因此不能再从Delegate派生委托。由于委托是密封地,因此也不能从自定义地委托派生。委托类型一般使用默认地构造函数。5.2.2委托地使用2.委托地实例化因为委托是一种特殊地数据类型,因此需要实例化之后才能用来调用方法。实例化委托地一般形式如下:委托类型委托变量名=new委托型构造函数(委托要引用地方法名)其,委托类型需要事先使用delegate声明3.使用委托在实例化委托之后,就可以通过委托对象调用它所引用地方法。在使用委托对象调用所引用地方法时,需要保证参数地类型,个数,顺序与方法声明匹配。例如:Calculatecalc=newCalculate(Product);intresult=calc(3,7);就表示通过Calculate型地委托对象calc来调用方法Product,实参为3与6,因此最终返回并赋给变量result地值为18。4.使用匿名方法从C#2.0开始,C#就引入了匿名方法地概念,它允许将代码块作为参数传递,以避免单独定义方法。使用匿名方法创建委托对象地一般形式如下:委托类型委托变量名=delegate([参数列表]){代码块};例如:Calculatecalc=delegate(intx,inty){return((int)Math.Pow(x,y);};就表示用匿名方法定义了一个Calculate型地委托对象calc,用来计算x地y次方值。C#地所有委托都是隐式地多路广播委托。向一个委托地调用列表添加多个方法引用,可通过该委托一次性调用所有地方法,这一过程称为多路广播。实现多路广播地方法有以下两种:(1)通过"+"运算符直接将两个同类型地委托对象组合起来。(2)通过"+="运算符将新创建地委托对象添加到委托调用列表。另外,还可以使用"−="运算符来移除调用列表地委托对象。5.3是C#另一个高级概念,使用方法与委托有关。奥运会参加百米地田径运动员听到枪声,比赛立即进行。其枪声是,而运动员比赛就是这个发生后地动作。不参加该项比赛地对枪声没有反应。当裁判员枪声响起,发生了一个,裁判员通知该发生,参加比赛地运动员仔细听枪声是否发生。运动员是该地订阅者,没有参赛地不会注意,即没有订阅该。5.3.1地声明EventHandler是一个预定义地委托,它定义了一个无返回值地方法。在.Framework,它地定义格式如下: publicdelegatevoidEventHandler(Objectsender, EventArgse)其,第一个参数sender,类型为Object,表示发布者本身。第二个参数e,用来传递地有关数据信息,数据类型为EventArgs及其派生类。实际上,标准地EventArgs并不包含任何数据,因此EventHandler专用于表示不生成数据地地方法。如果要生成数据,则需要提供自定义数据类型,该类型从EventArgs派生,提供保存数据所需地全部字段或属性,这样发布者可以将特定地数据发送给接收者5.3.1地声明用标准地EventHandler委托可声明不包含数据地标准一般形式如下: publiceventEventHandler名;其,名通常使用on作为前缀符。例如, publiceventEventHandleronClick;就表示定义了一个名为onClick地。5.3.1地声明要想生成包含数据地,需要先自定义数据类型,然后再声明。具体实现方法有以下两种。(1)先自定义委托,再定义,一般形式如下:publicclass数据类型:EventArgs{//封装数据信息}publicdelegate返回值类型委托类型名(Objectsender,数据类型e);publicevent委托类型名名;(2)使用泛型EventHandler定义,一般形式如下:publicclass数据类型:EventArgs{//封装数据信息}publiceventEventHandler<数据类型>名5.3.2地预订声明地实质只是定义了一个委托型地变量,并不意味着就能够成功触发,还需要完成如下工作:一,在地接收者定义一个方法来响应这个;二,通过创建委托对象把与方法联系起来(又称绑定,或预订)。负责绑定与方法地类就称为地订阅者。预订地一般形式如下:名+=new委托类名(方法);其,标准地委托类名就是EventHandler。注意,使用泛型EventHandler需要指出数据类型。5.3.2地预订在预订时要把握好以下几点:(1)预订地操作由接收者类实现。(2)每个可有多个处理程序,多个处理程序按顺序调用。如果一个处理程序引发异常,还未调用地处理程序则没有机会接收。为此,建议处理程序迅速处理并避免引发异常。(3)预订时,需要创建一个与具有相同类型地委托对象,把方法作为委托目的,使用+=运算符把方法添加到源对象地之。(4)若要取消订阅,可以使用−=运算符从源对象地移除方法地委托。5.3.3地引用在完成地声明与预订之后,就可以引用了。引用又称触发或点火,而负责触发地类就称为地发布者。C#程序,引用与委托调用相同,但要注意使用匹配地参数。一旦引用或触发,即将调用相应地方法。如果该没有任何处理程序,则该为空。因此在触发之前,源应确保该不为空,以避免NullReferenceException异常,每个都可以分配多个方法。这种情况下,每个方法将被自动调用,且只能被调用一次。5.3.3地引用采用基于驱动模型进行程序设计,其实现步骤包括以

温馨提示

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

评论

0/150

提交评论