在本篇,我们主要学习并理解以下几个方面:
【事件•理论篇】事件的定义和事件模型的五个组成部分
@刘老师c#入门详解
拿生活中最常见的例子来举例,你在刷朋友圈,看见了你的女神发了一条分手的消息。抽象一下就是:作为主体的女神(也就是一个类),它具备了[分手]这个事件成员。
当她[分手]这个事件发生之后,她通过朋友圈,来通知关注这则消息的一些潜在人群。而这些潜在人群,一定是关注了她分手这个事件。分手这个事件,让女神具备了通知关注者的能力。
你们也就是我们,等于收到了女神[分手]这个事件的通知,我们这时可以采取行动了。更进一步来说,伴随着事件的发生,在发生的时候,必定会产生一些和事情本身相关的数据。我们把与事件本身相关的数据,也就是我们所说的消息叫做事件参数:EventArgs。以朋友圈为例,当女神发这个朋友圈的时候,那她必然会伴随着一些其他消息,比如,地址,有趣的图片,或者是否@你等等。
站在女神这个类的角度上,她在完成了通知关注者的同时把相关的信息也一并发送给了事件的关注者。也就是我们,站在关注者的角度,我们除了收到通知之外,还受到了经由事件发送过来的消息。
但是这个事件参数有什么用处呢,我们接受到这个事件参数后,会根据事件参数里的内容采取相应的行动。
微软把通过通知和事件参数,而采取行动的行为叫做相应事件或者处理事件,而处理事件时所具体做的事情,我们叫做事件处理器:EventHandler。
抽象成程序世界的话,就是如果一个事件发生了,别的类要做出响应,那么别的类(事件响应者)必定回去调用它的一个方法(事件处理器),而我们把这个方法就叫做事件处理器。
这里已经可以差不多知道[事件模型]的五个组成部分了:
比如玩家去商城购买东西:
事件模型 | 类比对象 |
---|---|
事件的拥有者 | 玩家 |
事件 | 买东西 |
事件的响应者 | 商店老板 |
事件处理器 | 方法(背包中物品的添加) |
事件订阅 | += |
这里在完善一下事件的核心功能的定义:将事件的事件参数,也就是事件的相关信息,通知给那些订阅了这个事件的人们。
首先,我们来看一下图片:
在time中可以看到一个类里最重要的三个成员:属性,方法和事件.
using UnityEngine; using System.Timers; using System; //这个例子的功能:每隔N秒进行一个固定的行为功能(打印信息) //事件的拥有者 => timer //事件 => Elapsed //事件的响应者 => Printer //事件处理器 => 自定义的一个方法: Action, MyAction //事件的订阅关系 => += public class EventEx : MonoBehaviour { Timer timer = new Timer(); public static int counter = 0; public static string displayString = "This string will loop the Length.";//32长度 private void Start() { //这里有2种解决方法: //第一种是找到事件的那个约定,查找相关的参数 //第二种就是用VS直接快速构建 //简略格式 timer.Elapsed += Printer.MyAction;//Printer类事件处理器:MyAction订阅了由timer为主题的Elapsed事件 //完整格式 timer.Elapsed += new ElapsedEventHandler(Printer.MyAction); timer.Interval = 500;//1000ms = 1s timer.Start(); } public class Printer { internal static void MyAction(object sender, ElapsedEventArgs e) { Debug.Log(counter++ % displayString.Length); } } }
输出结果: