C#事件订阅发布实现原理详解

作者:David Huang 时间:2022-10-15 20:36:35 

我们用一个简单的例子,来说明一下这种消息传递的机制。

有一家三口,妈妈负责做饭,爸爸和孩子负责吃。。。将这三个人,想象成三个类。

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

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

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

这种机制就是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("孩子 : 打完这局再吃。");
   }
 }

运行结果:

C#事件订阅发布实现原理详解

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

来源:https://www.cnblogs.com/David-Huang/p/5150671.html

标签:C#,事件,订阅,发布
0
投稿

猜你喜欢

  • SpringBoot Validation提示信息国际化配置方式

    2021-08-21 09:27:32
  • Linux下Hadoop 2.7.3 安装搭建过程

    2023-11-08 05:13:59
  • java序列化与反序列化的使用方法汇总

    2022-02-27 14:47:25
  • android View 绘制完成监听的实现方法

    2023-08-06 20:47:05
  • 详解C#如何实现读写ini文件

    2022-02-04 23:15:27
  • 解决springboot配置logback-spring.xml不起作用问题

    2022-09-10 11:21:24
  • C# using语法糖图文详解

    2023-08-05 02:57:36
  • Java设计模式之工厂模式案例详解

    2023-11-27 20:08:03
  • 浅谈C#六大设计原则

    2023-05-02 16:29:58
  • Java编程实现统计一个字符串中各个字符出现次数的方法

    2023-01-24 18:02:20
  • 浅谈Java中向上造型向下造型和接口回调中的问题

    2023-11-09 13:51:46
  • Java集合之Map接口的实现类精解

    2023-10-07 15:10:37
  • Java系统的高并发解决方法详解

    2021-08-23 08:39:50
  • Java原生服务器接收上传文件 不使用MultipartFile类

    2023-11-09 19:31:36
  • Java中lambda表达式的基本运用

    2023-09-09 08:02:36
  • java二叉查找树的实现代码

    2022-08-12 02:36:43
  • Java如何基于ProcessBuilder类调用外部程序

    2023-11-27 20:19:57
  • C#中利用Lotus notes公共邮箱发送邮件的方法

    2023-10-02 03:00:12
  • Java 详解循环屏障CyclicBarrier如何实现多线程分段等待执行完成

    2022-02-16 04:50:49
  • springboot如何静态加载@configurationProperties

    2021-12-13 16:20:13
  • asp之家 软件编程 m.aspxhome.com