【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();
    }
}
相关推荐
千寻xun4 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
researcher-Jiang4 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅6 小时前
java springboot N+1问题
java·开发语言·spring boot
skywalk81636 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
IT笔记8 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode8 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇8 小时前
C# 运算符重载详解
开发语言·后端·c#
TPBoreas9 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
MartinYeung59 小时前
[论文学习]大语言模型安全综述:攻击、防御、对齐、度量与护栏的深度解析
学习·安全·语言模型
敲代码的嘎仔9 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二