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

news2024/9/27 7:20:46

 // 工具人类

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事件
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

Taier 作为袋鼠云的开源项目之一,是一个分布式可视化的 DAG 任务调度系统。旨在降低 ETL 开发成本,提高大数据平台稳定性,让大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平…

Unknown tree updater grow_gpu_histb报错

报错显示:由于xgboost的问题而报错 报错显示:Unknown tree updater grow_gpu_histb 原因是 XGBoost 在尝试使用 GPU 加速时无法识别指定的树更新器。也就是当前xgboost版本中没有grow_gpu_histb组件,所以需要安装正确的版本。 经搜索&#…

Git如何上传文件到github

Git下载网址: https://git-scm.com/downloads 1. 新建一个空文件夹,用来上传文件,第一次需创建,以后无需创建 2. 点进去空文件夹,鼠标右键,使用Git Bash Here 打开 3. 克隆远程仓库:git cl…

【业务功能篇67】异构数据源表结构迁移

业务涉及到需要将数据库迁移,并且还换了不同厂商的,比如Oracle 迁移到 Mysql, 方式一:Navicat工具 最简单的做法,由于是不同数据库类型的,sql语法可能会有点差别,直接用Navicat客户端,把两个数据库连接&a…

mac上如何压缩视频大小?

mac上如何压缩视频大小?由于视频文件体积庞大,常常会占据我们设备的大量存储空间。通常情况下,我们选择删除视频以释放内存,但这将永久丢失它们。然而,有一种更好的方法可以在不删除视频的情况下减小内存占用&#xff…

微信小程序 蓝牙设备连接,控制开关灯

1.前言 微信小程序中连接蓝牙设备,信息写入流程 1、检测当前使用设备(如自己的手机)是否支持蓝牙/蓝牙开启状态 wx:openBluetoothAdapter({}) 2、如蓝牙已开启状态,检查蓝牙适配器的状态 wx.getBluetoothAdapterState({}) 3、添加…

PHP 公交公司充电桩管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 公交公司充电桩管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88220946 论文下…

如何把PDF转换成PPT?试试这个转换方法

在现代办公和学习中,我们经常会遇到需要将PDF文件转换成PPT文件的需求。PDF作为一种通用的文件格式,被广泛应用于文档的共享和传递。通过将PDF转换成PPT,我们可以更好地编辑、演示和展示内容,适应不同设备和平台,提升交…

PyQt6学习第一篇

PyQt6中文文档 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。PyQt6 是基于 Python 的一系列模块。它是一个多平台的工具包,可以在包括Unix、Windows和Mac OS在内的大部分主要操作系统上运行。PyQt6 有两个许可证,开发人员可以…

OJ练习第149题—— 二叉树中的最大路径和

二叉树中的最大路径和 力扣链接:124. 二叉树中的最大路径和 题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根…

三分钟上手!一文看懂 Git 的底层工作原理

这是一篇能让你迅速了解 Git 工作原理的文章,实战案例解析,相信我,3 分钟,绝对能够有收获! Git 目录结构 Git 的本质是一个文件系统(很重要,记住这句话,理解这句话)&…

极简版VS自定义:我选择极简版

极简版VS自定义:我选择极简版 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!&…

图数据库_Neo4j_Centos7.9安装Neo4j社区版3.5.4_基于jdk1.8---Neo4j图数据库工作笔记0011

首先上传安装包,到opt/soft目录 然后看一下jdk安装的是什么版本的,因为在neo4j 4以后就必须要用jdk11 以上的版本,我这里还用着jdk1.8 所以 我这里用3.5.4的版本 关于下载地址: https://dist.neo4j.org/neo4j-community-3.5.4-unix.tar.gz 然后再去解压到/opt/module目录下 …

用递归与迭代完成二叉树的三种遍历

目录 二叉树的前序遍历 题目 前序遍历题目链接 递归代码 1.利用方法返回值的代码 2.返回值为void的代码 非递归实现前序遍历(利用栈stack) 1.利用方法返回值的代码 2.返回值为void的代码 二叉树的中序遍历 题目 :给定一个二叉树的根节点 root ,返回 它…

小红书数据分析:如何借势热点ip,打造爆款热度笔记

导语 影视作为小红书的后起板块之一,今夏来势汹汹~众多「爆款」影视/电影的出现极大程度上刺激着社区用户保持发布欲望,抬升了用户碎片化表达的意愿,刺激了小红书社区内容的活跃度。 小红书独有的社区特色,让影视作品除了解说外…

冠霖团队与TPC公司线下会议共谋TPC资产管理基金项目合作

近年来,金融市场蓬勃发展,为全球各大金融机构提供了前所未有的合作机会。在这个背景下,冠霖团队和TPC公司的线下会议成为一场引人瞩目的合作洽谈,旨在共同探讨TPC资产管理基金项目的合作机会与前景。 TPC公司作为一个拥有广泛国际…

3D模型格式转换工具如何与Parasolid集成?

概述 HOOPS Exchange包括一个 Parasolid 连接器,它允许 Parasolid 开发人员轻松地将 CAD 数据导入到活动的 Parasolid 会话中。如果源数据基于 Parasolid(NX、Solid Edge 或 SolidWorks),则数据将按原样导入。 这意味着您可以假…

京东门详一码多端探索与实践 | 京东云技术团队

本文主要讲述京东门详业务在支撑过程中遇到的困境,面对问题我们在效率提升、质量保障等方向的探索和实践,在此将实践过程中问题解决的思路和方案与大家一起分享,也希望能给大家带来一些新的启发 一、背景 1.1、京东门详介绍 1.1.1、京东门…

python怎么下载以前的版本,python怎么下载第三方库

大家好,给大家分享一下python怎么下载以前的版本,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! Python 下载安装(文末附python全套学习资料) 安装python分三个步骤:1.下载python 2.安装pyth…

计网第三章(数据链路层)(二)

目录 一、可靠传输 二、可靠传输的三种实现机制 1.停止等待协议SW(自动重传协议ARQ) (1)理想情况(即无差错情况): (2)有误码的情况: (3&#…