【C#小知识】c#中的delegate(委托)和event(事件)

        今天来介绍一下delegate和event。delegate在c#中可以定义一个函数类型,可以将函数作为一个对象来使用。event在c#中则可以看做一个函数的集合,event中包含了一个或多个函数。

delegate

using System;public class MyClass
{//定义委托public delegate void EventHandler(string pParameter);//委托对象public EventHandler handler = null;public void Main(){handler = TestFunction;handler("Hello World");}private void TestFunction(string pParameter){Console.WriteLine("pParameter is " + pParameter);}
}

        如上代码,定义委托关键字“delegate”,委托的定义包含委托返回值、委托名称、委托参数。定义了委托类型之后,就可以声明委托对象了。EventHandler就是定义的委托类型,handler则是声明的委托对象。

        在使用过程中就可以将函数TestFunction赋值给handler,这里需要注意的是委托的返回值和参数必须和赋值函数的返回值和参数一致,否则编译器则会提示错误。在使用时像普通的函数调用一样使用即可。

event

using System;public class MyClass
{public delegate void EventHandler(string pParameter);public event EventHandler handler = null;public void Main(){handler += HelloWorld;handler += GoodMorning;handler("");handler -= GoodMorning;handler?.Invoke("");/*输出结果* This is HelloWorld* This is GoodMorning* This is HelloWorld*/}private void HelloWorld(string pParameter){Console.WriteLine("This is HelloWorld");}private void GoodMorning(string pParameter){Console.WriteLine("This is GoodMorning");}
}

        如上代码,使用关键字“event”来定义事件,这里的handler已经不是委托对象了,而是事件对象,事件的类型依然是委托类型。和委托对象不同,事件对象可以包含多个函数,通过+=运算符来进行添加函数。如果需要从事件中去除某个函数,则可以通过-=运算符来移除函数。

        事件除了可以像普通函数一样通过()括号的方式调用,也可以通过Invoke方法进行调用。作者个人比较喜欢用Invoke方法进行调用,这样可以使用条件运算符“?”来进行判断事件是否为空。

官方文档连接

delegate文档连接:https://learn.microsoft.com/zh-cn/dotnet/csharp/delegate-class

event文档连接:https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-from-events

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

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

相关文章

计网day6

七 应用层 7.1 网络应用模型 7.2 DNS系统 7.3 文件传输协议FTP 7.4 电子邮件 7.5 万维网和HTTP协议

细数高德地图的发展史

根据2023年自然资源部公布的名单显示,以下公司通过“地图甲级测绘资质”换证审核,也就意味着,以下这些公司可以继续从事电子地图的采集和制作、商业合作等相关业务。 而这一点,对于以电子地图导航为主要业务支撑的企业至关重要。…

Sql Server 视图

USE [数据库名称] GO /****** Object: View [dbo].[视图名称] Script Date: 2024/2/19 10:08:13 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[视图名称:V_XXXXX] AS SELECT FILED1, FILED2, FILED3, FILED4 FROM dbo.表名…

【编程题】跳石板

跳石板 分析后可知 要在众多解中寻找最优解 因此用动态规划 比如: 4-6只需跳一步,而6-8也只需一步,因此在刚才跳了一步的基础上再加1 8到10一步,8到12一步,9到12一步,8-10-12两步,因此到12位置…

Hash哈希

当需要快速查询数据的记录时: 手动按某规则为数据建立索引,利用数组维护数据若1中需要开大数组爆内存,利用官方库的Hash集合,可以将最好情况下的时间复杂度优化到O(1)避免T和M。 1. LC 2036 最大好子数组和 VP双周赛123T3。一开…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午,一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物,共同探讨行业未来的新增长点。 会议伊始,杨国福集团数字化中心负责人王林林发表了主题演讲&a…

Redis-面试题

一、基础 1、什么是Redis C语言编写,基于key-value存储的nosql开源内存数据库内存存储、数据结构优化,高性能一般用于应用和数据库之间的分布式缓存中间件提供主从复制+哨兵、集群的方式实现高可用,在redis集群中通过hash槽的方式实现数据分片,进一步提升性能和可扩展性2、…

使用Nginx或者Fiddler快速代理调试

1 背景问题 在分析业务系统程序问题时,存在服务系统环境是其它部门或者其它小组搭建或运维的,并且现在微服务时代,服务多且复杂,在个人机器上搭建起如此环境,要么费事费力,要么不具备充足条件。 急需有一种方法或者工具可以快速辅助调试定位分析问题。本文下面介绍代理方…

算法-递归

题目:打印中序遍历指定节点的后续节点 思路:两种情况当前节点右子树是否为null,如果不是返回右子树最左非空子节点,否则往上找,直到父节点为空或者当前节点是父节点的左子树,返回父节点 public class Code…

LeetCode面试题 17.24. Max Submatrix LCCI——压缩数组+动态规划

文章目录 一、题目二、题解 一、题目 Given an NxM matrix of positive and negative integers, write code to find the submatrix with the largest possible sum. Return an array [r1, c1, r2, c2], where r1, c1 are the row number and the column number of the subma…

2.12:C语言测试题

1.段错误:str指向NULL,不能把"hello world" 复制给NULL 2.报错:返回局部变量,本函数结束,非法访问,不一定输出hello world 3.地址传递,修改str,正常输出hello 4.可以输出…

npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题

转载:npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题_npm err! code cert_has_expired npm err! errno cert-CSDN博客 npm config set registry http://registry.cnpmjs.org npm config set registry http://registry.npm.taobao.org

中国电子学会2023年12月真题C语言软件编程等级考试一级(含解析答案)

中国电子学会考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2023年12月 编程题五道 总分:100分一、数的输入和输出(20分) 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制: 1000 内存限制: 65536 输入 一行两个数,分…

【Linux 02】权限基本概念

文章目录 🌈 Ⅰ 权限概念🌈 Ⅱ 权限管理1. 文件访问者分类 (角色)2. 文件类型和访问权限 (事物属性)3. 文件权限值表示方法 🌈 Ⅲ 权限修改1. chmod 设置文件访问权限2. chown 修改文件拥有者3. chgrp 修改文件或目录的所属组 🌈 …

【数据分享】2014-2024年全国监测站点的逐月空气质量数据(15个指标\免费获取)

空气质量的好坏反映了空气的污染程度,在各项涉及城市环境的研究中,空气质量都是一个十分重要的指标。空气质量是依据空气中污染物浓度的高低来判断的。 我们发现学者王晓磊在自己的主页里面分享了2014年5月以来的全国范围的到站点的逐时空气质量数据&am…

接口测试工具开发文档

1 开发规划 1.1 开发人员 角 色 主要职责 负责模块 人员 备注 n xxx模块 xxx 1.2 开发计划 <附开发计划表> 1.3 开发环境和工具 开发工具 工具 作用 Notepad 编辑器 Perl 解释器 2 总体设计 设计思路&#xff1a;因为测试app和server。首先必须…

[C#]winform基于opencvsharp结合pairlie算法实现低光图像增强黑暗图片变亮变清晰

【低光图像增强介绍】 在图像处理领域&#xff0c;低光图像增强是一个具有挑战性的任务。由于光线不足&#xff0c;这些图像往往呈现出低对比度、高噪声和细节丢失等问题&#xff0c;严重影响了图像的视觉效果和后续分析的准确性。因此&#xff0c;开发有效的低光图像增强方法…

WSL安装Ubuntu22.04,以及深度学习环境的搭建

安装WSL 安装 WSL 2 之前&#xff0c;必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。 以管理员身份打开 PowerShell 并运行&#xff1a; dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart下载 Linux 内核更…

初识ONLYOFFICE 8.0:办公软件的革命性升级

引言 随着数字化时代的到来&#xff0c;办公软件已经成为我们日常生活和工作的重要组成部分。在这个充满竞争的市场中&#xff0c;ONLYOFFICE凭借其卓越的性能和功能&#xff0c;脱颖而出&#xff0c;成为许多企业和个人用户的优选。近期&#xff0c;ONLYOFFICE推出了全新的8.…

大数据技术之 Kafka

大数据技术之 Kafka 文章目录 大数据技术之 Kafka第 1 章 Kafka 概述1.1 定义1.2 消息队列1.2.1 传统消息队列的应用场景1.2.2 消息队列的两种模式 1.3 Kafka 基础架构 第 2 章 Kafka 快速入门2.1 安装部署2.1.1 集群规划2.1.2 集群部署2.1.3 集群启停脚本 2.2 Kafka 命令行操作…