委托和事件精选易懂实例代码.docx
- 文档编号:9354136
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:19
- 大小:18.39KB
委托和事件精选易懂实例代码.docx
《委托和事件精选易懂实例代码.docx》由会员分享,可在线阅读,更多相关《委托和事件精选易懂实例代码.docx(19页珍藏版)》请在冰点文库上搜索。
委托和事件精选易懂实例代码
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:
创建委托对象,并事件处理函数包含在其中同时设置好将要触发事件的对象*/
publicA(Bb)/*A()方法,Bb表示classBb=newclass()实例化*/
{
MyHandler1d1=newMyHandler1(OnHandler1);
MyHandler2d2=newMyHandler2(OnHandler2);
b.Event1+=d1;
b.Event2+=d2;
}
}
/*步骤4:
通过委托对象(也就是触发事件)来调用被包含的方法*/
classB
{
publiceventMyHandler1Event1;
publiceventMyHandler2Event2;
publicvoidFireEvent1(MyEventArgse)
{
if(Event1!
=null)
{
Event1(this,e);
}
}
publicvoidFireEvent2(MyEventArgse)
{
if(Event2!
=null)
{
Event2(this,e);
}
}
}
publicclassMyEventArgs:
EventArgs
{
publicstringm_id;
}
publicclassDriver
{
publicstaticvoidMain()
{
Bb=newB();Aa=newA(b);
MyEventArgse1=newMyEventArgs();
MyEventArgse2=newMyEventArgs();
e1.m_id="Eventargsforevent1";
e2.m_id="Eventargsforevent2";
b.FireEvent1(e1);
b.FireEvent2(e2);
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
/*委托的精选实例*/
publicdelegatevoidMyDelegate(stringinput);
classProgram
{
publicstaticvoiddelegateMethod1(stringinput)
{
Console.WriteLine(
"ThisisdelegateMethod1andtheinputtothemethodis{0}",input);
}
publicstaticvoiddelegateMethod2(stringinput)
{
Console.WriteLine(
"ThisisdelegateMethod2andtheinputtothemethodis{0}",input);
}
staticvoidMain(string[]args)
{
MyDelegatep=newMyDelegate(delegateMethod1);
p+=delegateMethod2;
p("callingthedelegate");
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
publicdelegatevoidDelegateClassHandle();
publicclassEmployee
{
publiceventDelegateClassHandlePlayGame;
publicvoidGames()
{
if(PlayGame!
=null)
{
PlayGame();
}
}
}
publicclassAdmin
{
publicvoidNotify()
{
System.Console.WriteLine("someoneisplayinggame");
}
}
classProgram
{
staticvoidMain(string[]args)
{
Employeeemployee=newEmployee();
Adminadmin=newAdmin();
employee.PlayGame+=newDelegateClassHandle(admin.Notify);
employee.Games();
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
publicdelegatevoidDelegateClassHandle();
publicclassEmployee
{
publiceventDelegateClassHandlePlayGame;
publicvoidMyEvent()
{
Admina=newAdmin();/*只有实例化才能调用其中的方法*/
PlayGame=a.Notify;
}
publicvoidGames()
{
if(PlayGame!
=null)
{
PlayGame();
}
}
}
publicclassAdmin
{
publicvoidNotify()
{
Console.WriteLine("someoneisplayinggame");
}
}
classProgram
{
staticvoidMain(string[]args)
{
Employeee=newEmployee();
e.MyEvent();
e.Games();
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
/*委托的实例代码*/
/*步骤1,声明delegate对象*/
publicdelegatevoidMyDelegate(stringname);
classMyDelegateTest
{
publicstaticvoidMyDelegateFunc(stringname)
{
Console.WriteLine("Hello,{0}",name);
}
publicstaticvoidMain()
{
/*步骤2,创建delegate对象*/
MyDelegatemd=newMyDelegate(MyDelegateFunc);
/*步骤3,调用delegate*/
md("sam1111");
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
publicdelegatevoidMyDelegate(stringa);
classMyDelegateTest
{
voidFireEvent1(stringa)
{
Console.WriteLine("IaminOnHandler1andMyEventArgsis{0}",a);
}
voidFireEvent2(stringa)
{
Console.WriteLine("IaminOnHandler2andMyEventArgsis{0}",a);
}
staticvoidMain()
{
MyDelegateTestt=newMyDelegateTest();
MyDelegatedm=newMyDelegate(t.FireEvent1);
dm("Eventargsforevent1");
dm=t.FireEvent2;
dm("Eventargsforevent2");
Console.ReadKey();
}
}
/*〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 委托 事件 精选 易懂 实例 代码