[C#] Event事件快速Demo

 代码1:

 class Program
    {
        static void Main(string[] args)
        {
            MessageProducer messageProducer = new MessageProducer();

            Subscriber zhangsan = new Subscriber("张三");
            Subscriber lisi = new Subscriber("李四");
            Subscriber wangwu = new Subscriber("王五");

            messageProducer.Subscribe(zhangsan);
            messageProducer.Subscribe(lisi);
            messageProducer.Subscribe(wangwu);

            messageProducer.Produce("hello");

            messageProducer.Unsubscribe(lisi);

            messageProducer.Produce("hello again");
        }
    }

    public delegate void MessageProducerHandler(string message);
    public class MessageProducer
    {
        public event MessageProducerHandler MessageHandle;

        /// <summary>
        /// 订阅
        /// </summary>
        /// <param name="subscriber"></param>
        public void Subscribe(Subscriber subscriber)
        {
            Console.WriteLine($"【{subscriber.Name}】订阅了消息");
            MessageHandle += subscriber.OnMessage;
        }
        /// <summary>
        /// 取消订阅
        /// </summary>
        /// <param name="subscriber"></param>
        public void Unsubscribe(Subscriber subscriber)
        {
            Console.WriteLine($"【{subscriber.Name}】取消了消息订阅");
            MessageHandle -= subscriber.OnMessage;
        }

        /// <summary>
        /// 发布一条消息
        /// </summary>
        /// <param name="message"></param>
        public void Produce(string message)
        {
            Console.WriteLine($"发布消息【{message}】");
            MessageHandle?.Invoke(message);
        }
    }

    public class Subscriber
    {
        public Subscriber(string name)
        {
            Name = name;
        }

        /// <summary>
        /// 订阅者名称
        /// </summary>
        public string Name { get; }

        /// <summary>
        /// 消息处理方法
        /// </summary>
        /// <param name="message"></param>
        public void OnMessage(string message)
        {
            Console.WriteLine($"【{Name}】收到消息【{message}】");
        }
    }

代码2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventDemo
{
    public delegate void MsgHandler(string msg);
    public class PinDuoDuo
    {
        public event MsgHandler msgHandler;
        public void Order(User user)
        {
            Console.WriteLine("{0}已拼单", user.Name);
            msgHandler += user.OnMessage;
        }
        public void UnOrder(User user)
        {
            Console.WriteLine("{0}取消拼单", user.Name);
            msgHandler -= user.OnMessage;
        }
        public void ShipGoods(string msg)
        {
            Console.WriteLine("发货");
            msgHandler?.Invoke(msg);
        }
    }
    public class User
    {
        public User(string name)
        {
            Name = name;
        }
        public string Name { get; set; }
        public void OnMessage(string msg)
        {
            Console.WriteLine("{0}收到消息:{1}", Name, msg);
        }
    }
    public class Program
    { 
        public static void Main()
        {
            PinDuoDuo pdd = new PinDuoDuo();
            User zs = new User("张三");
            User lisi = new User("李四");
            User wmz = new User("王麻子");
            pdd.Order(zs);
            pdd.Order(lisi);
            pdd.Order(wmz);
            pdd.UnOrder(lisi);
            pdd.ShipGoods("货已发出");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/157055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

日志存档及解析

网络中的每个设备都会生成大量日志数据&#xff0c;日志数据包含有关网络中发生的所有活动的关键信息&#xff0c;存储所有这些数据并对其进行管理对组织来说是一项挑战&#xff0c;因此&#xff0c;这些日志文件被压缩并存储在效率较低的存储介质中&#xff0c;无法轻松检索。…

将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent

近日&#xff0c;来自清华大学的研究人员联合面壁智能、中国人民大学、MIT、CMU 等机构共同发布了新一代流程自动化范式 “智能体流程自动化” Agentic Process Automation&#xff08;APA&#xff09;&#xff0c;结合大模型智能体帮助人类进行工作流构建&#xff0c;并让智能…

ZBrush 2024(三维数字雕刻软件)

ZBrush是一款Mac数字雕刻软件&#xff0c;它具有以下功能&#xff1a; 雕刻工具&#xff1a;ZBrush的雕刻工具非常强大&#xff0c;可以让用户在3D模型上进行雕刻&#xff0c;就像使用传统雕塑工具一样。高精度模型创建&#xff1a;ZBrush可以创建高精度的3D模型&#xff0c;适…

美创科技与南京大数据安全技术有限公司达成战略合作

近日&#xff0c;美创科技与南京大数据安全技术有限公司正式签署战略合作协议&#xff0c;优势力量共享、共拓共创共赢。 美创科技CEO柳遵梁、副总裁罗亮亮、副总裁王利强&#xff0c;南京大数据安全技术有限公司总经理潘杰、市场总监刘莉莎、销售总监王皓月、技术总监薛松等出…

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍IIC总线器件模数芯片PCF8591介绍通过I…

【Linux】Ubuntu16.04下安装python高版本--源码安装

Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6&#xff08;但我没安装成功&#xff09; 好像是因为Ubuntu16.04的软件仓库&#xff08;源&#xff09;中python的最高版本就是python3.5&#xff0c;所以无法直接用apt来安装 #方法一 sudo…

在 el-table 中嵌入 el-checkbox el-input el-upload 多组件,实现复杂业务场景

由于业务场景的复杂性&#xff0c;需实现&#xff1a;在 el-table 表格中 嵌入 el-checkbox 多选框 及 el-input 输入框 及 el-upload 上传组件 &#xff0c;先附上实现效果图。 从图片可以看出其实就是一个规格可以带有多个属性的规格表&#xff0c;实现此效果需涉及到的知识点…

Flutter NestedScrollView 、SliverAppBar全解析,悬浮菜单的应用

在我们开发过程中经常会使用到悬浮菜单的使用&#xff0c;当我们滑动到指定位置后&#xff0c;菜单会自动悬浮。 实现效果如下&#xff08;左为滑动前、右为滑动后&#xff09;&#xff1a; 上述便是通过NestedScrollView 、SliverAppBar实现的效果&#xff0c;通过两个控件我…

二层、三层交换机之间到底有什么区别?

简单地说 二层交换机&#xff0c;没有充当三层网关角色的能力&#xff08;Capability&#xff09;。三层交换机&#xff0c;首先也是二层交换机。但是&#xff0c;它有一个额外的能力&#xff08;Capability&#xff09;&#xff0c;软件配置一下&#xff0c;可以充当三层网关…

新加坡金融科技节,IMF呼吁加快CBDCs数币的框架

CBDCS,那CBDC是什么呢&#xff1f; 中央银行数字货币 CBDC&#xff08;英文&#xff1a;Central Bank Digital Currency&#xff09;&#xff0c;指的是数字版本的国家货币. 我们现在经常听到的数字人民币&#xff0c;也就是中国的CBDC. 在传统与创新的交汇处&#xff0c;一种…

Python自动化测试之request库(五)

在做接口测试的过程中&#xff0c;我们经常会遇到参数关联&#xff0c;也就是我们经常所说的上一个接口返回是下一个接口的请求。 参数关联 在应用业务接口中&#xff0c;完成一个业务功能时&#xff0c;有时候一个接口可能不满足业务的整个流程逻辑&#xff0c;需要多个接口…

Linux线程创建,退出,等待

目录​​​​​​​ 一 为什么使用线程 1.1概念 1.2使用线程的理由 二 线程的创建&#xff0c;退出&#xff0c;等待 2.1 线程创建 2.2 线程退出 2.3.线程等待 2.4. 线程ID获取及比较 一 为什么使用线程 1.1概念 概念&#xff1a;"进程——资源分配的最小单位&…

拼多多商家私信群发脚本,按键精灵版工具,源码分享

也是用按键精灵写的&#xff0c;实现的功能就是通过图色识别拼多多商品列表然后逐个对商家客服进行私信&#xff0c;私信内容可以在脚本里面提前配置好&#xff0c;代码怎么部署&#xff1f;回答&#xff1a;粘贴到你的按键精灵就行了&#xff0c;因为代码完全开源。 UI界面&a…

uni-app 使用vscode开发uni-app

安装插件 uni-create-view 用于快速创建页面 配置插件 创建页面 输入页面名称&#xff0c;空格&#xff0c;顶部导航的标题&#xff0c;回车 自动生成页面并在pages.json中注册了路由 pages\login\login.vue <template><div class"login">login</d…

数字化医学影像管理系统PACS源码

PACS系统&#xff0c;意为影像归档和通信系统。它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外仪、显微仪等设备产生的图像&#xff09;通过各…

技术实践|高斯集群服务器双缺省网关故障分析

导语&#xff1a;当前国产化数据库使用范围越来越广泛&#xff0c;在GaussDB数据库的使用过程中难免会遇到一些问题&#xff0c;有的问题是由于在安装过程中没有注意细节而产生的&#xff0c;多数隐患问题都是在特定场景下才会暴露出来&#xff0c;且暴露的时间未知&#xff0c…

SOLIDWORKS参数化设计之主参数设置

SOLIDWORKS参数化设计是通过主参数来驱动整个模型的变化&#xff0c;因此确定主参数是很重要的部分。主参数可以是数值&#xff0c;也可以是条件&#xff0c;可以手动输入&#xff0c;也可以做成下拉列表。今天我们就来看看主参数的下拉列表是如何做到的。 SolidKits.AutoWork…

2023-11-17 LeetCode每日一题(最大和查询)

2023-11-17每日一题 一、题目编号 2736. 最大和查询二、题目链接 点击跳转到题目位置 三、题目描述 给你两个长度为 n 、下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;另给你一个下标从 1 开始的二维数组 queries &#xff0c;其中 queries[i] [xi, yi] 。 对于…

企鹅h5充值encrypt_msg h5 1.0.21补环境算法

如图 主要的加密参数就是这个版本号为H5_1.0.21的encrypt_msg参数 这次采用的方式为jsdom补环境 需要注意的是 我们得从前置页面&#xff08;https://pay.***.com/h5/index.shtml?xxxx&#xff09;拿到关键的入参 用正则匹配出ops大数组以及用户信息openId/openKey等参数 成品…

在誉天学习华为认证,有真机吗

通过培训机构学习华为认证&#xff0c;特别是在HCIE的课程学习中&#xff0c;很多人关心的就是培训机构是否有真机能够进行华为认证的相关实验&#xff0c;今天我们一起来看看&#xff0c;在誉天学习华为认证&#xff0c;有真机吗&#xff1f; 誉天总部数据中心机房和誉天总部一…
最新文章