五分钟轻松学之 C# 事件
序言
学习应该是一件很轻松的事情, 别问我五分钟能干什么? 读一下试试呗?
前言
参考过各种文档后, 我们都知道, 事件的本质是一种委托, 在这里, 委托就不详细说了, 我们直接看什么是事件?
什么是事件?
对, 就如这"事件"两个字的一样, 发生了一件事, 那么这件事就是事件, 比如: 过生日, 出去旅游, 上班等等…
那发生了事件, 必定会引起一些列的事情发生, 我们以过生日为例:
■ 小明过生日发送了朋友圈,
■ 然后妈妈看到后祝小明生日快乐
■ 爸爸看到后也祝小明生日快乐并给你发了个大红包
PS: 别问我为什么小明爸爸妈妈没记得小明生日
事件是一种特殊的多播委托,仅可以从声明事件的类或结构中对其进行调用。类或对象可以通过事件向其他类或对象通知发生的相关事情。
这就很完美符合了我们的发布-订阅(publisher-subscriber) 模型
发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”
事件5要素:
1、发布者
2、订阅者
3、事件的声明
4、事件的注册/事件的订阅
5、事件的触发
以上面的例子我们写个Demo看一下
class Program
{
static void Main(string[] args)
{
var eventClass = new EventClass();
eventClass.OnSendACircleOFriends();//当发送朋友圈时 - 发布者
}
}
public class EventClass
{
public event Action SendACircleOFriends;//事件的声明
public void OnSendACircleOFriends()
{
SendACircleOFriends += MotherSeeTheCircleOFriends;//来自妈妈的订阅
SendACircleOFriends += FatherSeeTheCircleOFriends;//来自爸爸的订阅
SendACircleOFriends?.Invoke();//事件的触发
}
public void MotherSeeTheCircleOFriends()
{
//订阅者 - 妈妈
Console.WriteLine("妈妈: 祝小明生日快乐!");
}
public void FatherSeeTheCircleOFriends()
{
//订阅者 - 爸爸
Console.WriteLine("爸爸: 祝小明生日快乐!并向小明砸出一个大红包!");
}
}
如上图代码: SendACircleOFriends
是一个无参事件,
当发生发送朋友圈(OnSendACircleOFriends)
这件事时,
订阅了妈妈看到的动作(MotherSeeTheCircleOFriends)
和爸爸看到的动作FatherSeeTheCircleOFriends)
然后进行SendACircleOFriends
事件的 Invoke
触发
我们看一下运行的结果:
当我们触发小明发送朋友圈事件时, 我们收到了订阅者小明爸爸妈妈的祝福 !
五分钟, 你学会了吗?
参考: https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/events/