C#中事件的简单解释
很多程序都有一个共同的需求,即当一个特定的程序事件发生的时候,程序的其他部分可以得到该事件已经发生的通知。
发布者/订阅者模式可以满足这种需求。在这种模式中,发布者类定义了一系列程序的其他部分可能感兴趣的事件,其他类可以“注册”,以便在这些事件发生的时候通知它们。
这一部分的概念都可以类比于触发器的概念,一旦触发器被触发,将执行规定的一系列事件,上面说的发布者/订阅者模式也好理解了,发布者发布一个事件,并且给出触发器,订阅者可以订阅事件,那么在触发器被触发的时候,订阅者将得到通知(从而可以执行自己的方法)。
说的再通俗一点,举一个赛跑的例子,假如ABCDE五个人赛跑,约定听到裁判的枪响之后才能起跑。这里面就涉及到触发的概念,裁判枪响触发了ABCDE起跑。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
delegate void Del();//声明委托
class Program
{
class CaiPan
{
public event Del KaiQiang;//事件(触发器),裁判开枪
public void Ready()
{
Console.WriteLine("CaiPan is ready , and he shoot");//裁判已经准备开枪了
KaiQiang();//裁判开枪了,触发器被触发了
}
}
class YunDongYuan
{
string name;
public YunDongYuan(CaiPan caipan,string name)//每个运动员都需要订阅裁判开枪这个事件,之后才能做出自己的行为
{
caipan.KaiQiang += Run;
this.name = name;
}
public void Run()
{
System.Threading.Thread.Sleep(1500);//听到枪响经过一定反应时间后,开始起跑
Console.WriteLine("运动员:" + name + "开始起跑.....");
}
}
static void Main(string[] args)
{
CaiPan caipan = new CaiPan();
YunDongYuan A = new YunDongYuan(caipan, "A");//A首先订阅事件,寓意A首先听到枪响即首先被触发起跑的事件
YunDongYuan B = new YunDongYuan(caipan, "B");
YunDongYuan C = new YunDongYuan(caipan, "C");
YunDongYuan D = new YunDongYuan(caipan, "D");
YunDongYuan E = new YunDongYuan(caipan, "E");
caipan.Ready();//裁判开枪
Console.ReadKey();
}
}
}