游戏开发实战教程(Unity+C#)-(5)自考成人专科本科课件.pptx

上传人:知****量 文档编号:71814159 上传时间:2023-02-06 格式:PPTX 页数:27 大小:267.04KB
返回 下载 相关 举报
游戏开发实战教程(Unity+C#)-(5)自考成人专科本科课件.pptx_第1页
第1页 / 共27页
游戏开发实战教程(Unity+C#)-(5)自考成人专科本科课件.pptx_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《游戏开发实战教程(Unity+C#)-(5)自考成人专科本科课件.pptx》由会员分享,可在线阅读,更多相关《游戏开发实战教程(Unity+C#)-(5)自考成人专科本科课件.pptx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、游戏开发实战教程游戏开发实战教程 (Unity+C#Unity+C#)第第 5 5 章章 接 口、委 托 与 事 件接 口、委 托 与 事 件目录目录 CONTENTSCONTENTS5.1接口015.2委托025.3事件03内容简述 “接口”理解为就是定义一套标准,然后由实现类来具体实现其中的方法,接口就是一组类的抽象。“委托”理解为“方法的抽象”,也就是说定义一个方法的模板,至于这个方法具体是怎么样的,就由方法自己去实现。事件是用户操作,例如:按键、点击、鼠标移动等。或者某些事件,例如:系统生成的通知。应用程序需要响应事件发生时。5.15.1接口接口 接口(interface)是C#的一种

2、数据类型,属于引用类型。一个接口定义一个协定。接口可以包含方法、属性、事件和索引器,接口本身不提供它所定义的成员的实现,接口只指定实现该接口的类或结构必须提供的成员。实现某接口的类必须遵守该接口定义的协定,即必须提供接口成员的实现。1.定义定义 接口是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。2.特点特点 通过接口可以实现多重继承,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是public。接口成员不能有new、static、abstract、override、virtual修饰符。接口中只包含成员的签名,接口没有构造函数,所有不能直接使用new对

3、接口进行实例化。C#是单继承,接口是解决C#里面类可以同时继承多个基类的问题。5.1.1.接口的定接口的定义义接口的声明在C#中,声明接口使用interface关键字,一般形式如下:访问修饰符 interface 接口名:基接口列表 /接口成员 说明:接口成员可以是属性、方法、索引器和事件,不能包含字段、构造函数等。所有接口成员隐式地具有了public访问修饰符,因此,接口成员不能添加任何访问修饰符。5.1.2 接口的使用接口的使用接口的实现接口的实现接口主要用来定义一个规则,让企业内部或行业内部的软件开发人员按标准去实现应用程序的功能。因此,继承接口的类或结构必须实现接口中的所有属性、方法、

4、索引器和事件,继承接口的方法与继承类相似 接口的继承接口的继承接口也可以继承其它接口,而接口可以多继承,即接口可以从多个接口继承,基接口名之间用逗号分隔。多重接口实现多重接口实现C#不允许多重类继承,但是C#允许多重接口实现,这意味着一个类可以实现多个接口,如果一个Mobile类支持USB,也可以支持Bluetooth,我们就应该同时实现IUsb和IBluetooth接口,在继承时,两个接口之间用逗号分隔。其类的头部如下所示:public class Mobile:IUsb,IBluetooth如果类Mobile是类phone的派生子类,也可以同时继承phone类。但要注意,基类必须在所有的接

5、口之前,如:public class Mobile:Phone,IUsb,IBluetooth访问接口的方法访问接口的方法当类Mp3实现了IUsb后,我们可以通过MP3类的对象访问IUsb的成员,就好象是Mp3类的成员一样:Mp3 m=new Mp3();lblShow.Text=m.TransData(计算机,MP3设备);或者我们也可以将Mp3对象转换成接口类型,然后用这个接口来访问方法:Mp3 m=new Mp3();IUsb iu=(IUsb)m;lblShow.Text=iu.TransData(计算机,MP3设备);5.25.2委托委托委托(delegate)是一种动态调用方法的类

6、型,它与类、接口和数组相同,属于引用型。在C#程序中,可以声明委托类型、创建委托的实例(即委托对象)、把方法封装于委托对象之中,这样通过该对象就可以调用方法了。一个完整的方法具有名字、返回值和参数列表,用来引用方法的委托也要求必须具有同样的参数和返回值。因为C#允许把任何具有相同签名(相同的返回值类型和参数)的方法分配给委托变量,所以可通过编程的方式来动态更改方法调用,因此委托是实现动态调用方法的最佳办法,也是C#实现事件驱动的编程模型的主要途径。委托的特点委托类似于 C+函数指针,但与指针不同的是,委托是完全面向对象的,是安全的数据类型。委托允许将方法作为参数进行传递。委托可用于定义回调方法

7、。委托可以把多个方法链接在一起。这样,在事件触发时可同时启动多个事件处理程序。委托签名不需要与方法精确匹配。委托的声明委托是一种引用型的数据类型,在C#中使用关键字delegate声明委托,一般形式如下:访问修饰符 delegate 返回值类型 委托名(参数列表);其中,访问修饰符与声明类、接口和结构的访问修饰符相同,返回值类型是指将要动态调用的方法的返回值类型,参数列表是将要动态调用的方法的形参列表,当方法无参数时,省略参数列表。例如:public delegate int Calculate(int x,int y);就表示声明了一个名为Calculate的委托,可以用来引用任何具有两个i

8、nt型的参数且返回值也是int型的方法。在.NET Framework 中,自定义的委托自动从Delegate 类派生,因此不能再从 Delegate 中派生委托。由于委托是密封的,因此也不能从自定义的委托派生。委托类型一般使用默认的构造函数。5.2.2 委托的使用委托的使用2委托的实例化委托的实例化v因为委托是一种特殊的数据类型,因此必须实例化之后因为委托是一种特殊的数据类型,因此必须实例化之后才能用来调用方法。实例化委托的一般形式如下:才能用来调用方法。实例化委托的一般形式如下:委托类型委托类型 委托变量名委托变量名 =new 委托型构造函数委托型构造函数(委托委托要引用的方法名要引用的方

9、法名)v其中,委托类型必须事先使用其中,委托类型必须事先使用delegate声明声明3使用委托在实例化委托之后,就可以通过委托对象调用它所引用的方法。在使用委托对象调用所引用的方法时,必须保证参数的类型、个数、顺序和方法声明匹配。例如:Calculate calc=new Calculate(Product);int result=calc(3,7);就表示通过Calculate型的委托对象calc来调用方法Product,实参为3和6,因此最终返回并赋给变量result的值为18。4使用匿名方法从C#2.0开始,C#就引入了匿名方法的概念,它允许将代码块作为参数传递,以避免单独定义方法。使用

10、匿名方法创建委托对象的一般形式如下:委托类型 委托变量名=delegate(参数列表)代码块;例如:Calculate calc=delegate(int x,int y)return ((int)Math.Pow(x,y);就表示用匿名方法定义了一个Calculate型的委托对象calc,用来计算x的y次方值。C#的所有委托都是隐式的多路广播委托。向一个委托的调用列表添加多个方法引用,可通过该委托一次性调用所有的方法,这一过程称为多路广播。实现多路广播的方法有以下两种:(1)通过“+”运算符直接将两个同类型的委托对象组合起来。(2)通过“+=”运算符将新创建的委托对象添加到委托调用列表中。另

11、外,还可以使用“=”运算符来移除调用列表中的委托对象。5.3 5.3 事件事件 事件是C#中另一个高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。5.3.1 5.3.1 事件的声明事件的声明EventHandler是一个预定义的委托,它定义了一个无返回值的方法。在.NET Framework中,它的定义格式如下:publi

12、c delegate void EventHandler(Object sender,EventArgs e)其中,第一个参数sender,类型为 Object,表示事件发布者本身。第二个参数e,用来传递事件的相关数据信息,数据类型为 EventArgs及其派生类。实际上,标准的EventArgs并不包含任何事件数据,因此EventHandler专用于表示不生成数据的事件的事件方法。如果事件要生成数据,则必须提供自定义事件数据类型,该类型从 EventArgs 派生,提供保存事件数据所需的全部字段或属性,这样发布者可以将特定的数据发送给接收者5.3.1 5.3.1 事件的声明事件的声明用标准的

13、EventHandler委托可声明不包含数据的标准事件一般形式如下:public event EventHandler 事件名;其中,事件名通常使用on作为前缀符。例如,public event EventHandler onClick;就表示定义了一个名为onClick的事件。5.3.1 5.3.1 事件的声明事件的声明要想生成包含数据的事件,必须先自定义事件数据类型,然后再声明事件。具体实现方法有以下两种。(1)先自定义委托,再定义事件,一般形式如下:public class 事件数据类型:EventArgs /封装数据信息 public delegate 返回值类型 委托类型名(Obje

14、ct sender,事件数据类型 e);public event 委托类型名 事件名;(2)使用泛型EventHandler定义事件,一般形式如下:public class 事件数据类型:EventArgs /封装数据信息 public event EventHandler 事件名5.3.2 5.3.2 事件的预订事件的预订声明事件的实质只是定义了一个委托型的变量,并不意味着就能够成功触发事件,还需要完成如下工作:一、在事件的接收者中定义一个方法来响应这个事件;二、通过创建委托对象把事件与事件方法联系起来(又称绑定事件,或预订事件)。负责绑定事件与事件方法的类就称为事件的订阅者。预订事件的一般

15、形式如下:事件名+=new 事件委托类名(事件方法);其中,标准的事件委托类名就是EventHandler。注意,使用泛型EventHandler必须指出事件数据类型。5.3.2 5.3.2 事件的预订事件的预订在预订事件时要把握好以下几点:(1)预订事件的操作由事件接收者类实现。(2)每个事件可有多个处理程序,多个处理程序按顺序调用。如果一个处理程序引发异常,还未调用的处理程序则没有机会接收事件。为此,建议事件处理程序迅速处理事件并避免引发异常。(3)预订事件时,必须创建一个与事件具有相同类型的委托对象,把事件方法作为委托目标,使用+=运算符把事件方法添加到源对象的事件之中。(4)若要取消订

16、阅事件,可以使用=运算符从源对象的事件中移除事件方法的委托。5.3.3 5.3.3 事件的引用事件的引用在完成事件的声明与预订之后,就可以引用事件了。引用事件又称触发事件或点火,而负责触发事件的类就称为事件的发布者。C#程序中,引用事件与委托调用相同,但要注意使用匹配的事件参数。事件一旦引用或触发,即将调用相应的事件方法。如果该事件没有任何处理程序,则该事件为空。因此在触发事件之前,事件源应确保该事件不为空,以避免NullReferenceException异常,每个事件都可以分配多个事件方法。这种情况下,每个事件方法将被自动调用,且只能被调用一次。5.3.3 5.3.3 事件的引用事件的引用采用基于事件驱动模型进行程序设计,其实现步骤包括以下5个步骤:(1)定义事件相关信息类。(2)在事件发布者类(事件源)中声明事件,并声明一个负责触发事件的方法。(3)在事件接收者类中声明事件产生时调用的方法。(4)在事件接收者类中订阅事件。(5)在事件接收者类中触发事件。本本 章章 小小 结结 本章主要讲解了接口、委托和事件,接口是一个行为的规范或规定,它只有成员的说明而没有具体实现,实现接口的类必须实现接口中的所有成员。“委托”理解为“方法的抽象”,也就是说定义一个方法的模板,至于这个方法具体是怎么样的,就由方法自己去实现。事件是用户操作后,应用程序需要响应。谢谢谢谢

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁