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


     

     

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

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

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

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

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

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

    转载:https://www.cnblogs.com/David-Huang/p/5150671.html

  • 相关阅读:
    [CodeIgniter4]-将控制器放入子目录中
    [CodeIgniter4]-控制器
    [CodeIgniter4]-处理多环境
    [CodeIgniter4]-管理多个应用
    [CodeIgniter4]-代码模块
    [CodeIgniter4]-网页缓存
    [CodeIgniter4]-错误处理
    netfilter分析
    使用 SELinux 和 Smack 增强轻量级容器
    如何增强 Linux 系统的安全性,第一部分: Linux 安全模块(LSM)简介
  • 原文地址:https://www.cnblogs.com/wugh8726254/p/16364737.html
Copyright © 2020-2023  润新知