[.net 面向对象编程基础] (22) 事件
事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是.net设计控件的时候已经定义好的事件。除此之外,我们同样可以自己定义事件。
事件实际上是一种消息机制,当然点击控件时,click就通知处理他的方法去处理,实际上就是前面说的委托。因此我们可以说:事件是一种具有特殊签名的委托。而事件/消息机制是windows的核心,因此我们必须掌握他。
为了更加容易理解事件,我们还是使用前面的动物的示例来说明,有两三只动物,猫(名叫Tom),还有两只老鼠(Jerry和Jack),当猫叫的时候,触发事件(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
==============================================================================================
原文:http://www.cnblogs.com/yubinfeng/p/4592387.html