五分钟轻松学之 C# 事件

五分钟轻松学之 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/

你可能感兴趣的