要想技术有所提高,就是把有些问题真正的弄懂弄明白,我从事C#开发两年了,一直对事件委托等概念一知半解,有时候博客园上看看别的大牛的文章,看看懂了就过去了,时间长了又忘了,真正理解还是要自己动手弄些例子,搞懂这些概念,我写文章也是出于这个目的,希望和大家一块学习进步。
我还是拿经典的例子来说明:猫叫,老鼠跑,主人吵醒了。
我们用事件的方法来实现,把猫叫作为触发事件的方法,绑定在这个事件上的方法都会被触发。
先用网上大家的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
public
class Cat { /// <summary> /// 猫叫方法 /// </summary> public
void Miao() { Console.WriteLine( "喵喵喵喵喵喵" ); if
(OnMiao != null ) OnMiao( this ,EventArgs.Empty); } /// <summary> /// 猫叫事件 /// </summary> public
event EventHandler OnMiao; } |
1
2
3
4
5
6
7
8
9
10
11
12
13 |
public
class Master { public
Master() { } /// <summary> /// 主人被叫醒了 /// </summary> public
void Wake() { Console.WriteLine( "死猫叫啥叫,吵我睡觉!!!" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13 |
public
class Mouse { public
Mouse() { } /// <summary> /// 老鼠跑 /// </summary> public
void Run() { Console.WriteLine( "猫来了,快跑!!!!" ); } } |
客户端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
class
Program { static
void Main( string [] args) { Cat cat = new
Cat(); Mouse mouse = new
Mouse(); Master master = new
Master(); cat.OnMiao += delegate
{ mouse.Run(); }; cat.OnMiao += delegate
{ master.Wake(); }; cat.Miao(); } } |
这个办法可以实现,猫叫,老鼠跑,主人醒。但如果我想拓展下呢,主人叫有好几只猫,每只猫叫的声音都不一样,主人吵醒后要知道哪只猫把他吵醒了。
现在我们改写Cat类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
/// <summary> /// 我们自定义事件数据 /// </summary> public
class CatEventArgs : EventArgs { public
string CatName { get ; set ; } } public
class Cat { /// <summary> /// 定义事件委托 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public
delegate void CatEventHandler( object
sender, CatEventArgs e); public
Cat() { } /// <summary> /// 猫叫 /// </summary> public
void Miao() { Console.WriteLine( "喵喵喵喵喵喵" ); if
(OnMiao != null ) { CatEventArgs catEventArgs = new
CatEventArgs(); catEventArgs.CatName = "Tom" ; OnMiao( this , catEventArgs); } } /// <summary> /// 猫叫完成事件 /// </summary> public
event CatEventHandler OnMiao; } |
客户端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
class
Program { static
void Main( string [] args) { Cat cat = new
Cat(); Mouse mouse = new
Mouse(); Master master = new
Master(); cat.OnMiao += cat_OnMiao; cat.OnMiao += delegate
{ master.Wake(); }; cat.Miao(); } static
void cat_OnMiao( object
sender, CatEventArgs e) { Console.WriteLine( string .Format( "{0}猫在叫" ,e.CatName)); } } |
这样就知道哪只猫叫了,关键是我们自定义了CatEventArgs,这个类继承了EventArgs,可以传递事件信息,自定义信息,并且自定义事件委托public delegate void CatEventHandler(object sender, CatEventArgs e);
自己的小例子,大牛勿笑;新的一年祝大家心想事成,更上一层楼
--每天有点进步
原文:http://www.cnblogs.com/zb-success/p/3542792.html