C#中的事件的订阅与发布

认识发布者/订阅者模式

发布者定义一系列事件,并提供一个注册方法;html

订阅者发布者注册本身的事件处理逻辑,供一个可被回调的方法,也就是事件处理程序;当发布者的事件被触发的时候,订阅者将经过回调函数获得发布者通知,而订阅者所注册的回调函数,也就是事件处理逻辑的全部方法都会被执行函数

  • 发布者是指拥有某事件的类或者结构
  • 订阅者是指向发布者注册的类或者结构
  • 事件处理程序是指由订阅者注册到事件的方法,在发布者触发事件时执行

 参考:https://blog.csdn.net/weixin_38486884/article/details/82853508spa

从一个简单的例子,来讲明一下这种事件消息传递的机制! .net

      有一家三口,妈妈负责作饭,爸爸和孩子负责吃。。。将这三我的,想象成三个类。code

      妈妈有一个方法,叫作“作饭”。有一个事件,叫作“开饭”。作完饭后,调用开饭事件,发布开饭消息。htm

      爸爸和孩子分别有一个方法,叫作“吃饭”。对象

      将爸爸和孩子的“吃饭”方法,注册到妈妈的“开饭”事件。也就是,订阅妈妈的开饭消息。让妈妈作完饭开饭时,发布吃饭消息时,告诉爸爸和孩子一声。blog

 

这种机制就是C#中的,订阅发布。下面咱们用代码实现:事件

class Program { public static void Main(string[] args) { //实例化对象
            Mom mom = new Mom(); Dad dad = new Dad(); Child child = new Child(); //将爸爸和孩子的Eat方法注册到妈妈的Eat事件 //订阅妈妈开饭的消息
            mom.Eat += dad.Eat; mom.Eat += child.Eat; //调用妈妈的Cook事件
 mom.Cook(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } public class Mom { //定义Eat事件,用于发布吃饭消息
        public event Action Eat; public void Cook() { Console.WriteLine("妈妈 : 饭好了"); //饭好了,发布吃饭消息
            Eat?.Invoke(); } } public class Dad { public void Eat() { //爸爸去吃饭
            Console.WriteLine("爸爸 : 吃饭了。"); } } public class Child { public void Eat() { //熊孩子LOL呢,打完再吃
            Console.WriteLine("孩子 : 打完这局再吃。"); } }

 

运行结果:get

 

当爷爷奶奶来作客了怎么办呢?和爸爸孩子同样,写个Eat方法,一样注册到妈妈的开饭事件就行了。

 

出处:http://www.javashuo.com/article/p-gpdvwtir-ba.html

====

相关文章
相关标签/搜索