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

 更新时间:2020年12月03日 10:39:43   作者:David Huang  
这篇文章主要介绍了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("孩子 : 打完这局再吃。");
    }
  }

  运行结果:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#.NET 图片水印添加代码

    C#.NET 图片水印添加代码

    这篇文章主要为大家详细介绍了C#.NET 图片水印添加代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 使用C#发送Http请求实现模拟登陆实例

    使用C#发送Http请求实现模拟登陆实例

    本文主要介绍了使用C#发送Http请求实现模拟登陆实例,模拟登陆的原理简单,想要了解的朋友可以了解一下。
    2016-10-10
  • C#引用类型和值类型的介绍与实例

    C#引用类型和值类型的介绍与实例

    这篇文章主要介绍了C#引用类型和值类型,有需要的朋友可以参考一下
    2013-12-12
  • C#开发答题赢钱游戏(自动答题器)

    C#开发答题赢钱游戏(自动答题器)

    现在最火的直播游戏,那就是答题赢钱直播了,如百万英雄、芝士超人、花椒直播、冲顶大会等等,这些游戏的玩法都很简单,答对12题即可瓜分奖金了。玩法虽简单但是完全答对12题难度就挺高了,下面小编给大家带来了C#开发答题赢钱游戏,需要的朋友参考下吧
    2018-01-01
  • C#对象与XMl文件之间的相互转换

    C#对象与XMl文件之间的相互转换

    本文是对C#中对象与XMl文件之间的相互转换进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • 如何从dump文件中提取出C#源代码

    如何从dump文件中提取出C#源代码

    这篇文章主要介绍了如何从dump文件中提取出C#源代码,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C# 设计模式系列教程-工厂方法模式

    C# 设计模式系列教程-工厂方法模式

    工厂方法去除了条件分支(解除了工厂类与分支的耦合),解决了简单工厂对修改开放的问题。
    2016-06-06
  • c#获取数组中最大数的值

    c#获取数组中最大数的值

    这篇文章主要介绍了c#获取数组中最大数的值,需要的朋友可以参考下
    2014-02-02
  • C#实现自定义动画鼠标的示例详解

    C#实现自定义动画鼠标的示例详解

    这篇文章主要为大家详细介绍了如何利用C#实现自定义动画鼠标效果,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C#实现对象的序列化和反序列化

    C#实现对象的序列化和反序列化

    这篇文章介绍了C#实现对象序列化和反序列化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论