C#__事件event的简单使用:工具人下楼问题

// 工具人类
namespace DownStair
{delegate void DownStairDelegate(); // 定义了一个下楼委托class ToolMan{public string Name { get; set; } // 声明工具人的名字属性// public DownStairDelegate downStairDelegate = null; // 初始化委托downStair为空委托// 解决方案public event DownStairDelegate downStairDelegate = null; public ToolMan(string name) // 构造函数获取工具人名字{Name = name;}public void DownStair() // 定义了一个方法:工具人下楼帮忙带东西{Console.WriteLine("工具人" + Name + "下楼了");//downStair(); // error,未将对象引用设置到对象的实例// 解决方案if (downStairDelegate != null){downStairDelegate(); // 定义event后,只能在ToolMan类的内部触发}}}
}
// 懒人类
class Lazyman{public string Name { get; set; }public Lazyman(string name){Name = name;}public void TakeFood(){Console.WriteLine("给" + Name + "带盒饭");}public void TakePackage(){Console.WriteLine("给" + Name + "拿快递");}public void PrintFile(){Console.WriteLine("给" + Name + "打印文件");}}
// 调用运行
// 事件(event):// 基于委托,是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托,事件的声明// 受限制的委托,只能施加 +=、-= 操作符,只允许add、remove方法操作// 不允许直接赋值,只能在类的内部触发 // 类似订阅和发布class Program{static void Main(string[] args){// 工具人下楼问题// 创建对象ToolMan toolman = new ToolMan("大椿");Lazyman lazyman1 = new Lazyman("张三");Lazyman lazyman2 = new Lazyman("李四");Lazyman lazyman3 = new Lazyman("王五");toolman.DownStair(); // 工具人大椿下楼了Console.WriteLine("========");toolman.downStairDelegate += lazyman1.TakeFood;toolman.downStairDelegate += lazyman1.TakePackage;toolman.downStairDelegate += lazyman2.TakePackage;toolman.downStairDelegate += lazyman3.PrintFile;toolman.DownStair();// 工具人大椿下楼了// 给张三带盒饭// 给张三拿快递// 给李四拿快递// 给王五打印文件Console.WriteLine("========");toolman.downStairDelegate -= lazyman1.TakePackage;toolman.DownStair();// 工具人大椿下楼了// 给张三带盒饭// 给李四拿快递// 给王五打印文件出现问题//Console.WriteLine("========");//toolman.downStairDelegate = lazyman1.TakeFood; // 直接赋值后其他对象全部消失//toolman.DownStair();工具人大椿下楼了给张三带盒饭//Console.WriteLine("========");//toolman.downStairDelegate(); // 可直接调用downStairDelegate(),此时张三未下楼。给张三带盒饭// 解决办法:使用event事件}}
相关文章:
C#__事件event的简单使用:工具人下楼问题
// 工具人类 namespace DownStair {delegate void DownStairDelegate(); // 定义了一个下楼委托class ToolMan{public string Name { get; set; } // 声明工具人的名字属性// public DownStairDelegate downStairDelegate null; // 初始化委托downStair为空委托// 解决方案pu…...
初识Spring-ioc
初识Spring-ioc 1. Spring的简介2.Spring容器ioc的特点3.spring注入方式1.Setter方法注入(Setter Injection):通过Setter方法来注入依赖。在类中定义对应的Setter方法,并在方法中接收依赖的参数,Spring容器会通过调用S…...
windows10 安装WSL2, Ubuntu,docker
AI- 通过docker开发调试部署ChatLLM 阅读时长:10分钟 本文内容: window上安装ubuntu虚拟机,并在虚拟机中安装docker,通过docker部署数字人模型,通过vscode链接到虚拟机进行开发调试.调试完成后,直接部署在云…...
Java面试题目汇总
一、面向对象的三个基本特征 2、方法重载和方法重写的概念和区别 3、接口和内部类、抽象类的特性 4、文件读写的基本类 **5、串行化的注意事项以及如何实现串行化 6、线程的基本概念、线程的基本状态以及状态之间的关系 7、线程的同步、如何实现线程的同步 8、几种常用的数据结…...
【ARM 嵌入式 编译系列 6 -- GCC objcopy, objdump, readelf, nm 介绍】
文章目录 GCC objcopy 简介objcopy 常用参数GCC objdump 简介GCC readelf 介绍GCC nm 介绍上篇文章:ARM 嵌入式 编译系列 5 – GCC 内建函数 __builtin 详细介绍 下篇文章:ARM 嵌入式 编译系列 7 – ARM GCC 链接脚本详细讲解 GCC objcopy 简介 objcopy 是 GNU二进制工具集(…...
c语言每日一练(9)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...
毫米波射频方案分析
豪米波被誉为能够带来令人难以置信的网络吞吐量数据,但迄今为止它的采用一直乏善可陈。 毫米波技术的领导者高通公司认为,他们拥有高达60亿美元的前端机会。这 60亿美元将需要在日本、中国、韩国、欧洲和印度广泛采用 mmWave。尽管有这个巨大的机会&am…...
神经网络基础-神经网络补充概念-04-梯度下降法
概念 梯度下降法是一种常用的优化算法,用于在机器学习和深度学习中更新模型参数以最小化损失函数。它通过迭代地调整参数,沿着损失函数的负梯度方向移动,从而逐步逼近损失函数的最小值。 基本思想 梯度下降法的基本思想是:在每…...
神经网络基础-神经网络补充概念-45-指数加权平均
概念 指数加权平均(Exponential Moving Average,EMA)是一种平均方法,用于平滑时间序列数据或者计算变量的滚动均值。它对数据的权重分布呈指数递减,越靠近当前时刻的数据权重越高,越远离当前时刻的数据权重…...
模型预测笔记(一):数据清洗及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充 四、修改异常值4.1 删除4.2 替换 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况(二分类) 5.2 柱状图5.2.1 单特征与目标特征之间的…...
【Pytroch】基于K邻近算法的数据分类预测(Excel可直接替换数据)
【Pytroch】基于K邻近算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 K最近邻(K-Nearest Neighbors,简称KNN)是一种简单但常用的机器学习算法,用于分类和回归问题。它的核心思想是基于已…...
Centos 7 通过Docker 安装MySQL 8.0.33实现数据持久化及my.cnf配置
要在 CentOS 7 上使用 Docker 启动 MySQL 8.0.33,并配置 MySQL 的 my.cnf 文件,同时实现 MySQL 数据的持久化,可以按照以下步骤进行操作: 1、安装 Docker:确保你在 CentOS 7 上已经安装了 Docker。如果尚未安装&#…...
自夹持P型屏蔽型碳化硅沟槽型绝缘栅双极晶体管,用于低开通电压和开关损耗
目录 标题:Self-Clamped P-shield SiC Trench IGBT for Low On-State Voltage and Switching LossProceedings of the 35st International Symposium on Power Semiconductor Devices & ICs摘要信息解释研究了什么文章的创新点文章的研究方法文章的结论 标题&am…...
【数据结构与算法——TypeScript】树结构Tree
【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? 🌲 真实的树:相信每个人对现实生活中的树都会非常熟悉 🌲 我们来看一下树有什么特点? ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…...
多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测
多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测; 2.运行环境为Matlab20…...
Shell 编程基础01
0:目录 1.创建新的虚拟机项目 2.linux常见命令和配置时间同步器 3.文件属性 4.if for while和方法 1.创建新的虚拟机项目 默认下一步到虚拟机命名 默认下一步设置磁盘大小 自定义硬件 删除打印机设置映像地址 启动虚拟机 选择 install centOS 7 选择英文 设置时…...
Cross-Site Scripting
文章目录 反射型xss(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss-盲打xss-过滤xss之htmlspecialcharsxss之href输出xss之js输出 反射型xss(get) <script>alert("123")</script>修改maxlength的值 反射型xss(post) 账号admin密码123456直接登录 …...
基于java企业员工绩效考评系统设计与实现
摘 要 时代的变化速度实在超出人类的所料,21世纪,计算机已经发展到各行各业,各个地区,它的载体媒介-计算机,大众称之为的电脑,是一种特高速的科学仪器,比人类的脑袋要灵光无数倍,什么…...
SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹
文章目录 前言依赖连接 RedisRedis 配置文件Redis 工具类操作 Redis创建 Redis 文件夹查询数据遍历 Redis 文件夹 前言 Redis 是一种高性能的键值存储数据库,支持网络、可基于内存亦可持久化的日志型,而 Spring Boot 是一个简化了开发过程的 Java 框架。…...
c++11 标准模板(STL)(std::basic_stringbuf)(六)
定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbu…...
Anaconda3重装避雷指南:Win11系统这些配置不删干净等于白装(2024实测)
Anaconda3重装避雷指南:Win11系统深度清理实战手册 为什么你的Anaconda重装总失败? 每次重装Anaconda后,那些熟悉的报错信息又阴魂不散地出现?"明明已经卸载干净了"——这是大多数数据科学从业者最常发出的困惑。实际上…...
别再死记硬背了!用Treap(树堆)搞定LeetCode平衡树难题,附C++完整模板
Treap实战指南:用随机化平衡树高效解决LeetCode难题 1. 为什么选择Treap而非传统平衡树? 在算法竞赛和面试场景中,我们经常需要处理动态有序集合的操作。传统平衡树如AVL和红黑树虽然能保证严格的平衡性,但它们的实现复杂度往往让…...
平衡小车/倒立摆核心:用STM32CubeMX和串级PID实现精准角度控制,调参避坑指南
平衡小车与倒立摆实战:STM32CubeMX串级PID调参全解析 平衡控制系统一直是嵌入式开发者的试金石。去年校电赛上,我亲眼见证一支队伍因为PID参数整定不当,导致他们精心设计的倒立摆在演示时像喝醉了一样左右摇摆,最终与奖项失之交臂…...
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Vue.js构建的暗黑破坏神2存档编辑工具,专为单机玩家设计,提供角色属性修…...
OpenClaw + 搜索与资讯:让 AI 帮你「刷」信息,告别信息焦虑
你每天花多少时间刷信息流?30分钟?1小时?今天这篇文章,帮你把这段时间降为零。 01 信息过载是现代人的标配焦虑 早上醒来第一件事是什么?很多人已经条件反射地拿起手机,打开微信公众号、知乎、微博、Twitt…...
从美颜到自动驾驶:聊聊图像处理中的‘滤波’与‘采样’到底在干嘛?
从美颜到自动驾驶:聊聊图像处理中的‘滤波’与‘采样’到底在干嘛? 当你用手机自拍时轻轻滑动"磨皮"按钮,或是观看短视频平台自动修复的老电影,又或是坐在自动驾驶汽车里看它精准识别车道线——这些场景背后都藏着一套共…...
AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践
AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您面对一台被激活锁困住的iPhone或iPad时,那种无助感就像是拥有一把无法打…...
基于Spring AI与Alibaba的智能客服系统:架构设计与实战避坑指南
传统客服系统,尤其是那些基于硬编码规则引擎的,相信很多开发者都维护过。这类系统通常有几个让人头疼的“老大难”问题:用户稍微换个说法,机器人就“听不懂”了,意图识别率低得可怜;业务高峰期,…...
前端开发必备:fnm取代nvm,Node版本管理又快又稳
几乎前端都用过node版本管理工具nvm,但可能你没听说过fnm, fnm全称是 Fast Node Manager,就是一款用来管理电脑上 Node.js 版本的工具,简单说就是帮你在不同 Node 版本之间快速切换,解决项目依赖版本冲突的问题&#x…...
OpenClaw学术研究助手:Qwen3-32B驱动的论文摘要与笔记整理
OpenClaw学术研究助手:Qwen3-32B驱动的论文摘要与笔记整理 1. 为什么需要本地化的AI研究助手? 去年冬天,我在整理一个跨学科研究项目的文献时陷入了困境。手头堆积了200多篇PDF论文,每篇都需要提取核心观点、记录关键数据&#…...
