【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();
    }
}
相关推荐
艾莉丝努力练剑2 小时前
【AI接入大模型SDK】ChatSDK示例验证
人工智能·学习·面试·大模型·sdk
葡萄成熟时 !7 小时前
JAVA 常用API学习笔记
java·笔记·学习
剩下了什么8 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.8 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解9 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
吴声子夜歌9 小时前
Java面试题——基础(一)
java·开发语言
别动我齐刘海9 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
小庞在加油9 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars10 小时前
C#中的delegate委托
开发语言·c#
一直走下去-明10 小时前
简单的http抓包解包完整代码
开发语言·python