第十一章-委托和事件.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第十一章委托和事件基本要求1.掌握通过委托封装方法、委托的加减运算和及委托对象的传递;2.了解匿名方法和外部变量;3.掌握委托的发布与订阅、事件的发布和订阅;4.了解EventHandler类及其使用;5.掌握在事件中使用匿名方法。

第十一章委托和事件主要内容11.1委托和方法11.2匿名方法11.3事件处理

第十一章委托和事件 面向对象的核心思想之一就是将数据和对数据的操作封装为一个整体。前面我们已经掌握了数据对象作为方法参数进行传递,而使用委托(delegate)则能够将方法本身作为参数进行传递。本章将介绍委托的实现机制,并介绍其在匿名方法和事件中的应用。

11.1委托和方法11.1.1通过委托封装方法 委托(类似于C或C++中的函数指针)是一种特殊的引用类型,它将方法也作为特殊的对象封装起来,从而将方法作为变量或参数进行传递。例P11_1。 该例中首先定义了一个委托类型DualFunction(程序的A行),注意delegate关键字之后要说明委托的返回类型(没有返回类型则为void)和参数类型。 delegatevoidDualFunction(doublex,doubley);

11.1委托和方法11.1.1通过委托封装方法 程序的主方法的第一行代码(程序的B行)则创建了一个该类型的对象fun1。 DualFunctionfun1; 之后就可以将指定的方法封装到该委托对象中,不过方法的参数列表和返回值类型都必须和委托定义保持一致。例如: fun1=newDualFunction(Add);

11.1委托和方法11.1.1通过委托封装方法 注意,在new表达式的括号中是要封装的方法名,而不包含方法的参数和返回值类型。和其他类型的对象一样,委托对象的声明和初始化也可以合并在一行语句中,例如:DualFunctionfun1=newDualFunction(Add); 提示,上面的例子是通过委托电影当前类的静态方法,因此在创建表达式中只需要写出方法名;如果是电影外部类的静态方法,那么应写出方法所属的类名,例如:fun1=newDualFunction(Math.Add);如果调用的是非静态方法,那么还需要指出方法所属的对象名。

11.1委托和方法11.1.1通过委托封装方法 C#还允许将方法名直接写在委托赋值表达式赋值符号的右边,例如,下面的两个语句是等价的。 fun1=newDualFunction(Add); 等价于 fun1=Add; 最后,在程序中可以通过委托对象来调用指定的方法,其效果和直接调用原始方法的效果一样。例如: fun1(a,b);

11.1委托和方法11.1.1通过委托封装方法 从这个例子可以看出,委托的使用过程一般可以分为三个步骤:①委托类型定义;②对象创建和方法绑定;③调用方法。除了最后的方法调用以外,委托变量的使用和一般对象变量没有本质的区别。比如可以将一组委托对象放在一个数组中,上例中Main方法可以改为:

11.1委托和方法11.1.1通过委托封装方法publicstaticvoidMain(){DualFunction[]funs=newDualFunction[]{Add,Sub,Mul,Div};/*定义委托变量数组funs*/doublea=2.5,b=2;Console.Write(请选择需要的操作0、+1、-2、*3、/:);inti=int.Parse(Console.ReadLine());funs[i](a,b);}

11.1委托和方法11.1.2委托的加减运算 一个委托对象还可以封装多个方法,这是通过委托对象的相加(也称为合并)来实现的。例如,下面的委托对象fun就能够连续实现两个数的相加和相减运算。 DualFunctionfun1=newDualFunction(Add); DualFunctionfun2=newDualFunction(Sub); DualFunctionfun=fun1+fun2; fun(a,b);

11.1委托和方法11.1.2委托的加减运算 上面的代码等价于: DualFunctionfun1=Add; DualFunctionfun2=Sub; DualFunctionfun=fun1+fun2; fun(a,b); 委托的合并运算还可以使用符号赋值运算符,例如: DualFunctionfun=Add; Fun+=Sub;

11.1委托和方法11.1.2委托的加减运算 对应地,减法运算符可以将方法从已合并的委托对象中删除,例如: fun=fun-fun1; 或 fun=

文档评论(0)

iris + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档