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

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

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

相关文章

【BASH】回顾与知识点梳理(二十七)

【BASH】回顾与知识点梳理 二十七 二十七. 磁盘配额(Quota)27.1 磁盘配额 (Quota) 的应用与实作什么是 QuotaQuota 的一般用途Quota 的使用限制Quota 的规范设定项目 27.2 一个 XFS 文件系统的 Quota 实作范例实作 Quota 流程:设定账号实作 Quota 流程-1&#xff1a…

iTOP-i.MX8M开发板添加USB网络设备驱动

选中支持 USB 网络设备驱动,如下图所示: [*] Device Drivers→ *- Network device support → USB Network Adapters→ {*} Multi-purpose USB Networking Framework 将光标移动到 save 保存,如下图所示: 保存到 arch/arm64/c…

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…

Sentinel使用实例

不说了,直接上官方文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 项目说明 本项目演示如何使用 Sentinel starter 完成 Spring Clo…

试岗第一天问题

1、公司的一个项目拉下来 ,npm i 不管用显示 后面百度 使用了一个方法 虽然解决 但是在增加别的依赖不行,后面发现是node版本过高,更换node版本解决。 2、使用插件动态的使数字从0到100(vue-animate-number插件) 第一…

C++ 继承

1.继承的概念及定义 定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 1. 基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是 被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面…

JavaFx基础学习【四】:UI控件的通用属性

目录 前言 一、介绍 二、继承关系 三、常用通用属性 四、属性Properties 五、属性绑定 六、属性监听 七、事件驱动 八、其他章节 前言 如果你还没有看过前面的文章,可以通过以下链接快速前往学习: JavaFx基础学习【一】:基本认识_明…

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效,在其他页监听无效。 onLaunch:当uni-app 初始化完成时触发(全局只触发一次)on…

Jmeter性能测试系列-性能测试需求分析

性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同,功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性,性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…

线上售楼vr全景看房成为企业数字化营销工具

在房地产业中,VR全景拍摄为买家提供了虚拟看房的全新体验。买家可以通过相关设备,远程参观各个楼盘的样板间和实景,感受房屋的空间布局和环境氛围,极大地提高了购房决策的准确性。对于房地产开发商和中介机构来说,VR全…

在不破坏原有隔离状态的情况下,怎么实现网间数据安全摆渡?

随着网络技术的演进,网络攻击、数据窃取、数据泄露事件也愈发频繁,给企业造成损失和负面影响,企业数据防泄漏治理是大趋势,也是自身迫切需求。 2021年1月,中国农业银行因存在数据泄露风险、互联网门户网站泄露敏感信息…

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …

分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档&#xff1a;https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲&#xff0c;Nginx可以在接收完整的响应后再将其发送给客户端&#xff0c;从而提高性能和效率…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…

Mr. Cappuccino的第61杯咖啡——Spring之BeanPostProcessor

Spring之BeanPostProcessor 概述基本使用项目结构项目代码运行结果源代码 常用处理器项目结构项目代码执行结果 概述 BeanPostProcessor&#xff1a;Bean对象的后置处理器&#xff0c;负责对已创建好的bean对象进行加工处理&#xff1b; BeanPostProcessor中的两个核心方法&am…

React Dva项目小优化之redux-action

之前 我们讲过 models 接下啦 我们来给大家讲一个新的库 这个库的话 有最好 没有影响也不大 它主要是帮助我们处理 action的 我们直接在 GitHub 官网上搜索 redux-action 我们搜出来 第一个就是 从星数来看 还是非常优秀的 我们拉下来 找到这个Documentation 然后点击进去 进…

一、Dubbo 简介与架构

一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用&#xff1a;JEE、MVC分布式应用&#xff1a;SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架&#xff0c;对专业知识&#xff08;序列化/反序列化、网络、多线程、设计模式、性能优化等&#xff09;进行了更高层的抽象和…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

日精注塑机联网

不改造程序的话&#xff0c;日精支持输出CSV和txt数据作为其他软件的接口。 改造后可以支持63协议。 在软件层面日精也有专用的软件&#xff0c;可以看到其实设备厂家提供的软件功能已经非常丰富了&#xff0c;但这类软件最大的缺点是只能自己家的机器使用&#xff0c;要想其他…

ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)

前言 &#xff08;1&#xff09;volatile 关键字作为嵌入式面试的常考点&#xff0c;很多人都不是很了解&#xff0c;或者说一知半解。 &#xff08;2&#xff09;可能有些人会说了&#xff0c;volatile 关键字不就是防止编译器优化的吗&#xff1f;有啥好详细讲解的&#xff1…