以前的2片的文章:自己理解的不是很深入,先放之前的2篇,本章也不打算用多么晦涩难懂的原理机制,来点实用的。
https://www.cnblogs.com/LiMin/p/7212217.html
https://www.cnblogs.com/LiMin/p/10364867.html
在类型中定义的一种成员,定义了事件成员的类或者类的实例。允许通知其他对象发生了特定的事情。
比如Button 类定义了click 事件,应用程序中一个或者多个对象可以通过该事件接收发生的click操作,以便做后续操作。
Button类就是一个类,click 就是事件成员, 其他应用程序就是其他对象,通过事件成员click,其他对象被通知发生了特定的事情:点击。这样事件通俗的定义就解释完了。
首先我们看,事件是类型的成员,因此必须有一个类型,一个事件成员,一个其他对象才能构成事件的定义到触发,它才能发生作用。
那么事件是怎么通知到其他对象呢?因为时间可以理解为一个方法表,上面登记了其他对象接收该特定事情的方法入口。当事情发生时候,调用这些方法,那么其他对象就知道该特定事情就发生了。
先Demo后面有分析
using System; namespace EventTest { public class EventDemo { public void EventTest() { Cat cat = new Cat(); MouseEventArgs ms = new MouseEventArgs(); MasterEventArgs mas = new MasterEventArgs(); cat.Calling += ms.Escape;//老鼠对 clling 订阅 cat.Calling += mas.Wakened;//人 对 calling 订阅 cat.Call(); //猫叫 } } public sealed class Cat { public event EventHandler Calling; public void Call() { Console.WriteLine("猫叫了..."); Calling?.Invoke(this, EventArgs.Empty); } } public sealed class MouseEventArgs : EventArgs { public void Escape(object sender, EventArgs e) { Console.WriteLine("老鼠逃跑了..."); } } public sealed class MasterEventArgs : EventArgs { public void Wakened(object sender, EventArgs e) { Console.WriteLine("主人醒了"); } } }
那么我们来开始定义事件
三要素:
1.其他对象、事件、类
其他对象:就是一个接收通知的类型吧 按照标准规范这些类型继承自:System.EventArgs并且类型结尾以EventArgs结尾
2.事件成员本身
3.类
类中的方法要触发其他对象的响应,
4.触发 就是给事件注册进各自的对象方法即可
这样一个简单版本的形式主义事件就基本上完成了,也够用了。由于理解有限,以及事件讲起来麻烦,因此就以这个简单实用的版本来进行讲解。