委托和事件(精选易懂实例代码)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

usingSystem;/*要仔细研究,因为这是创新*//*步骤1,声明delegate对象*/publicdelegatevoidMyEventHandler(objectsender,EventArgse);classEventTest{/*2.实现方法,这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型*/publicstaticvoidMyEventFunc(objectsender,EventArgse){Console.WriteLine(Myeventisok!);}/*3.通过委托定义事件*/privateeventMyEventHandlermyevent;/*4.订阅方法*/publicEventTest(){this.myevent+=newMyEventHandler(MyEventFunc);}//5.触发事件publicvoidRaiseEvent(){EventArgse=newEventArgs();if(myevent!=null){myevent(this,e);}}publicstaticvoidMain(){EventTestet=newEventTest();Console.Write(Pleaseinputa:);strings=Console.ReadLine();if(s==a){et.RaiseEvent();}else{Console.WriteLine(Error);}Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*步骤1,声明delegate对象*/publicdelegatevoidMyEventHandler(objectsender,EventArgse);classEventTest{/*2.实现方法,这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型*/publicstaticvoidMyEventFunc(objectsender,EventArgse){Console.WriteLine(Myeventisok!);}/*3.通过委托定义事件*/privateeventMyEventHandlermyevent;/*4.订阅方法*/publicEventTest(){myevent+=MyEventFunc;}//5.触发事件publicvoidRaiseEvent(){EventArgse=newEventArgs();if(myevent!=null){myevent(this,e);}}publicstaticvoidMain(){EventTestet=newEventTest();et.RaiseEvent();Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*委托:委托是一个类,这个类保存了一个对象和这个对象的一个方法,所以当你调用这个委托的时候就是调用保存的对象的那个方法,委托的意义就是这个意思,把调用委托实际是委托给了一个对象的一个方法。因为委托是一个类,所以他是定义在类级别上的,也就是和类同级别的。*//*1.定义委托(方法签名和返回值确定)*/publicdelegatevoidComputeDelegate(inta,intb);publicclassprogram{/*2.实现方法*/voidAdd(inta,intb)/*非静态方法必须先把类实例化再被调用*/{Console.WriteLine(a+b);}staticvoidSub(inta,intb)/*静态方法无需把类实例化,可以直接被调用*/{Console.WriteLine(a-b);}staticvoidMain(string[]args){programp=newprogram();/*把类实例化,以便用类名p来调用类中的方法*//*3.实例化委托*/ComputeDelegatecompute=newComputeDelegate(p.Add);compute+=Sub;/*多播委托一次调用多个方法形成队列*//*4.通过委托用方法*/compute(300,100);Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*事件:事件是一种类的成员,他同方法,字段,属性是一个级别的,所以它定义在类的内部,你可以很容易区分开.和字段,属性一样,事件也有事件类型,比如一个叫Name的属性是String类型的,那么一个叫MouseMove的事件他是一个叫EventHandler的委托类型的事件是多点委托,对事件只能使用+=和-=运算*//*1.定义特殊委托(签名:事件发出者,事件参数,无返回值)*/publicdelegatevoidSampleDelegate(objectsender,EventArgse);publicclassProgram{/*2.实现方法*/voidProgram_SampleEvent(objectsender,EventArgse){Console.WriteLine(执行事件1);}voidProgram_ShowEvent(objectsender,EventArgse){Console.WriteLine(执行事件2);}/*3.通过委托定义事件*/publiceventSampleDelegateSampleEvent;/*4.订阅方法*/publicvoidMyEvent(){SampleEvent+=Program_SampleEvent;SampleEvent+=Program_ShowEvent;}/*5.触发事件*/publicvoidRaiseEvent(){EventArgse=newEventArgs();if(SampleEvent!=null){SampleEvent(this,e);}}staticvoidMain(string[]args){Programp=newProgram();p.MyEvent();p.RaiseEvent();Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*我们来模拟一个打字智能机,他有三部分构成:在键盘上面输入文字、输出在显示器、语音提示;如果要实现这三种操作必须需要三种不同的硬件,所以*//*键盘只能实现打字、显示器实现输出,语音提示设备实现读出文字。所以我们应该让他们看成三种不同的对象,来实现程序!*//*定义三个类,Smart(智能机类),Typing(打字方法),show(显示方法),MakyVoice(语音提示方法)*//*键盘打字*/classProgram{publicclassSmart{publicdelegatevoidSmartDelegate(charT);/*定义一个委托*/publiceventSmartDelegateSmarEvent;/*定义实现这个委托的事件*/publiccharT;/*相当于你每一次打的单个文字*//*定义一个字符串相当于我们从键盘上打出来的文字……呵*/publicstringText=解放四大快捷方式打开附件多撒即可了飞洒富商大贾快乐看附件撒疯狂;publicvoidTyping(){foreach(chartinText){T=t;if(SmarEvent!=null){SmarEvent(T);}}}}/*显示输出*/publicclassDisplay{publicvoidshow(charT){Console.WriteLine(T);}}/*语音提示*/publicclassVoice{publicvoidMakyVoice(charT){Console.WriteLine(您输出了:+T);}}staticvoidMain(string[]args){SmartS=newSmart();DisplayD=newDisplay();VoiceV=newVoice();S.SmarEvent+=newSmart.SmartDelegate(D.show);S.SmarEvent+=newSmart.SmartDelegate(V.MakyVoice);S.Typing();Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/publicdelegatevoidSmartDelegate(charT);/*定义一个委托*/publicclassSmart{publiccharT;publicstringText=解放四大快捷方式打开附件多撒即可了飞洒富商大贾快乐看附件撒疯狂;publicvoidshow(charT){Console.WriteLine(T);}publicvoidMakyVoice(charT){Console.WriteLine(您输出了:+T);}publiceventSmartDelegateSmarEvent;/*定义实现这个委托的事件*/voidMyEvent(){SmarEvent+=show;SmarEvent+=MakyVoice;}publicvoidTyping(){foreach(chartinText){T=t;if(SmarEvent!=null){SmarEvent(T);}}}staticvoidMain(string[]args){SmartS=newSmart();S.MyEvent();S.Typing();Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*定义委托,它定义了可以代表的方法的类型*/publicdelegatevoidGreetingDelegate(stringname);classProgram{privatestaticvoidEnglishGreeting(stringname){Console.WriteLine(Morning,+name);}privatestaticvoidChineseGreeting(stringname){Console.WriteLine(早上好,+name);}staticvoidMain(string[]args){GreetingDelegatedm=newGreetingDelegate(EnglishGreeting);dm(Jimmyzhang);dm=EnglishGreeting;dm(张子阳);Console.ReadKey();}}/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*//*步骤1:声明委托对象*/publicdelegatevoidMyHandler1(objectsender,MyEventArgse);publicdelegatevoidMyHandler2(objectsender,MyEventArgse);/*步骤2:创建事件处理函数的方法*/classA{publicconststringm_id=ClassA;publicvoidOnHandler1(objectsender,MyEventArgse){Console.WriteLine(IaminOnHandler1andMyEventArgsis{0},e.m_id);}publicvoidOnHandler2(objectsender,MyEventArgse){Console.WriteLine(IaminOnHandler2andMyEventArgsis{0},e.m_id);}/*步骤3:创建委托对象,并事件处理函数包含在其中同时设置好将要触发事件的对象*

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功