【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();
    }
}
相关推荐
不爱编程爱睡觉4 分钟前
代码随想录学习——项目学习——HTTP服务框架——环境配置问题
学习
泡泡以安12 分钟前
【爬虫教程】第7章:现代浏览器渲染引擎原理(Chromium/V8)
java·开发语言·爬虫
亮子AI12 分钟前
【Python】比较两个cli库:Click vs Typer
开发语言·python
月明长歌13 分钟前
Java进程与线程的区别以及线程状态总结
java·开发语言
Darkershadow23 分钟前
蓝牙学习之unprovision beacon
python·学习·ble
qq_4017004129 分钟前
QT C++ 好看的连击动画组件
开发语言·c++·qt
t1987512844 分钟前
广义预测控制(GPC)实现滞后系统控制 - MATLAB程序
开发语言·matlab
报错小能手1 小时前
线程池学习(六)实现工作窃取线程池(WorkStealingThreadPool)
开发语言·学习
一条咸鱼_SaltyFish1 小时前
[Day10] contract-management初期开发避坑指南:合同模块 DDD 架构规划的教训与调整
开发语言·经验分享·微服务·架构·bug·开源软件·ai编程
额呃呃1 小时前
STL内存分配器
开发语言·c++