码迷,mamicode.com
首页 > Web开发 > 详细

[.net 面向对象编程基础] (22) 事件

时间:2015-06-21 21:04:24      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

[.net 面向对象编程基础] (22)  事件

   事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是.net设计控件的时候已经定义好的事件。除此之外,我们同样可以自己定义事件。

   事件实际上是一种消息机制,当然点击控件时,click就通知处理他的方法去处理,实际上就是前面说的委托。因此我们可以说:事件是一种具有特殊签名的委托。而事件/消息机制是windows的核心,因此我们必须掌握他。

   为了更加容易理解事件,我们还是使用前面的动物的示例来说明,有两三只动物,猫(名叫Tom),还有两只老鼠(JerryJack),当猫叫的时候,触发事件(CatShout),然后两只老鼠开始逃跑(MouseRun)。在使用代码实现这个示例之前,我们先看一下事件的书面定义. 

1.什么是事件(Event)? 

 事件(Event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托. 

2.事件的声明 

public event 委托类型 事件名; 

事件使用event关键词来声明,他的返回类值是一个委托类型。 

通常事件的命名,以名字+Event 作为他的名称,在编码中尽量使用规范命名,增加代码可读性。 

3.事件示例 

下面我们实现本篇开始的猫捉老鼠的示例 

首先看一下UML 

 技术分享 

如上UML类图,有猫(Cat)和老鼠(Mouse)两个类,里面包含其成员.当猫叫(CatShout),触发事件(CatShoutEvent),事件通知老鼠,然后老鼠跑路(MouseRun).

先看两个类的代码如下:

 1     class Cat
 2     {
 3         string catName;
 4         string catColor { get; set; }
 5         public Cat(string name, string color)
 6         {
 7             this.catName = name;
 8             catColor = color;
 9         }
10         
11         public void CatShout()
12         {
13             Console.WriteLine(catColor+" 的猫 "+catName+" 过来了,喵!喵!喵!\n");
14 
15             //猫叫时触发事件
16             //猫叫时,如果CatShoutEvent中有登记事件,则执行该事件
17             if (CatShoutEvent != null)
18                 CatShoutEvent();
19         }
20 
21         public delegate void CatShoutEventHandler();
22 
23         public event CatShoutEventHandler CatShoutEvent;
24 
25     }
26     class Mouse
27     {
28         string mouseName;
29         string mouseColor { get; set; }
30         public Mouse(string name, string color)
31         {
32             this.mouseName = name;
33             this.mouseColor = color;
34         }
35 
36         public void MouseRun()
37         {
38             Console.WriteLine(mouseColor + " 的老鼠 " + mouseName + " 说:\"老猫来了,快跑!\"  \n我跑!!\n我使劲跑!!\n我加速使劲跑!!!\n");
39         }
40     }

调用如下:

 1             Console.WriteLine("[场景说明]: 一个月明星稀的午夜,有两只老鼠在偷油吃\n");
 2             Mouse Jerry = new Mouse("Jerry", "白色");
 3             Mouse Jack = new Mouse("Jack", "黄色");
 4 
 5 
 6             Console.WriteLine("[场景说明]: 一只黑猫蹑手蹑脚的走了过来\n");
 7             Cat Tom = new Cat("Tom", "黑色");
 8 
 9             Console.WriteLine("[场景说明]: 为了安全的偷油,登记了一个猫叫的事件\n");
10             Tom.CatShoutEvent += new Cat.CatShoutEventHandler(Jerry.MouseRun);
11             Tom.CatShoutEvent += new Cat.CatShoutEventHandler(Jack.MouseRun);
12 
13             Console.WriteLine("[场景说明]: 猫叫了三声\n");
14             Tom.CatShout();
15 
16 
17             Console.ReadKey();

运行结果如下:

技术分享

<未完待续,后面会进一步说明事件的其他引用>

 ============================================================================================== 

返回目录

 <如果对你有帮助,记得点一下推荐哦,有不明白的地方或写的不对的地方,请多交流>
 

QQ群:467189533

==============================================================================================  

[.net 面向对象编程基础] (22) 事件

标签:

原文地址:http://www.cnblogs.com/yubinfeng/p/4592387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!