1、一 突破难点,委托和事件,1.1委托介绍,定 义,委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,委托是函数的封装,它代表一“类”函数。它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的“类”。此时,委托的实例将代表一个具体的函数。,1.2委托举例,委托同学去购买火车票委托同学去餐厅买饭委托律师代理打官司委托同学替答道.,1.3 声明委托,关键字delegate可用于声明委托。声明委托的通用形式如下图所示。举例:,注意: 1 委托名称的命名要符合Pascal
2、命名法,一般以Delegate结尾 2 委托的参数和返回类型,都要和你要具体委托的方法要一致,public delegate void BugTicketDelegate();,1.4 创建委托,因为委托是一个类,所以用new关键字创建委托的实例。委托构造函数只有一个参数,即添加到该委托中的第一个方法。其常用格式如下图(左)所示。,一 其中,AClass表示需要实例化类(委托)的名称。ac1表示实例化对象。abc表示要引用的函数。new是关键字。二 委托的实例化还有一种不需要关键字new的方法。其格式如上图(右)所示。三 与常用格式不同的是没有关键字new,其他都相同。,1.5 多播委托,举例
3、: 你委托你的好朋友去给你买火车票了,买过火车票后,你又给他说,中午回到寝室,你帮我稍一份饭吧!,定 义,引用多个方法的委托,它连续调用每个方法。委托必须是同类型的,返回值类型一般是void,(如果有返回值,只获取最后一次执行的函数的返回值)。多播委托应用于事件模型中。,注:多播委托中,委托了多个方法,做了多件事情,1.6 多播委托的类,2.1事件,“请听题”,集中注意力聆听,其他人,事件源,事件的发布者,事件的订阅人,不关心,未订阅该事件,定义事件 为对象订阅该事件 将发生的事件通知给订阅人,8,2.2 定义事件,访问修饰符 event 委托名 事件名;,语法,public delegate
4、 void delegateMe();private event delegateMe eventMe;,9,定义,事件是操作发生时允许执行特定应用程序的代码的机制,2.3 事件的操作步骤,第一步: 在一个类里面声明关于事件的委托 public delegate void 事件类型的名称();,第二步:在类中声明事件,使用步骤一的delegate作为事件的类型 public event 事件类型名称 事件名;,2.3 事件的操作步骤,if(condition) eventMe();,第三步: 在类里面需要引入事件的方法,编写引发事件的方法,调用订阅特定事件的对象的所有委托,2.3 事件的操作步骤,第四步: 订阅事件 事件名称 += new 委托名称(事件处理的方法名称),eventMe += new delegateMe(objA.Method);eventMe += new delegateMe(objB.Method);,2.3 事件的操作步骤,第五步:编写事件的处理方法Public void 事件处理的方法名称() /方法体,第六步:在适当的条件下触发事件,即需要调用第三步中的引发事件的方法,总结,14,知识点: 1 委托的定义,委托的声明,创建委托,多播委托 2 事件的概念,语法形式,操作步骤等,重难点: 1 多播委托的理解和使用 2 事件的操作过程,