【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 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
神仙别闹4 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控