【C#】事件学习

通过一个警察抓小偷的实例去理解:
1、关联事件:警察关注偷窃事件

2、开始触发:小偷开始偷东西

3、事件触发后: 警察知道小偷开始偷东西,

4、触发事件之后的业务:警察开始抓小偷

事件分为两部分:

1、发布者和订阅者,上例中的小偷就是发布者,警察就是订阅者。

以下通过代码解释上述事例:

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Event
{
    /// <summary>
    /// 发布者
    /// </summary>
    //声明委托
    public delegate void  sendMessageHandler(string msg);
    public class Auther
    {
        //事件

        //声明事件
        public event sendMessageHandler sendMessage;


        //3、触发事件后的业务
        public virtual string ClickEvent(string msg)
        {
            if (msg == "小偷开始偷东西")
            {
                sendMessage.Invoke(msg);
              
                msg =msg+ ",警察开始抓小偷,抓到了";
              
                return msg;
            }
            return msg;

        }

        //2、开始触发
        public string  StartClick(string msg)
        {
            Console.WriteLine("现在开始触发事件");
           var res= ClickEvent(msg);
            return res;
        }
    }

    /// <summary>
    /// 接收者
    /// </summary>
    public class Reciver
    {
        //1、关联事件
        public void  Recive(Auther pro)
        {
            pro.sendMessage += Event_Pro;
        }


        //3、事件触发
        public void  Event_Pro(string msg)
        {
           
            var result = msg;
        }
    }
}
csharp 复制代码
public class main
{
    static void Main(string[] args)
    {
        Auther sendEvent = new Auther();
        Reciver subscriber = new Reciver();

        // 关注事件--偷窃事件
        subscriber.Recive(sendEvent);

        // 开始触发
       var res= sendEvent.StartClick("小偷开始偷东西");
        Console.WriteLine(res);
        Console.ReadLine();
    }
}
相关推荐
小熊恋旧34 分钟前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合35 分钟前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J36 分钟前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
架构师伯子明1 小时前
Ros 学习十三:IK Demo
学习
小羊没烦恼!1 小时前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
幼儿园蛋小黄1 小时前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习
晗夜未央2 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz2 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua