【C#】委托是什么
在 C# 中,委托(Delegate) 是一种类型安全的函数指针,可以将方法作为参数传递或者保存方法的引用。下面详细介绍一下委托的相关概念和用法:
1. 基本概念
- 类型安全:委托在声明时会指定方法的返回类型和参数列表,只有符合签名的方法才能赋值给该委托,保证了类型安全。
- 多播能力:委托不仅可以引用一个方法,还能同时引用多个方法。当调用委托时,会依次调用所有被引用的方法(适用于返回类型为 void 的委托)。
- 面向对象:委托是对象,可以赋值、传递、比较等,与其他对象一样。
2. 委托的声明与使用
-
声明委托:使用
delegate关键字来定义一个委托类型。例如:public delegate int MathOperation(int a, int b);这里声明了一个
MathOperation委托,要求所引用的方法必须接受两个int参数并返回一个int。 -
实例化委托:可以将符合签名的方法赋值给委托对象:
public class Calculator {public int Add(int x, int y) {return x + y;} }// 使用委托 Calculator calc = new Calculator(); MathOperation op = new MathOperation(calc.Add); int result = op(3, 4); // result 为 7 -
匿名方法和 Lambda 表达式:除了直接引用已有方法,还可以使用匿名方法或 Lambda 表达式来创建委托实例:
MathOperation multiply = delegate (int x, int y) {return x * y; };MathOperation subtract = (x, y) => x - y;
3. 多播委托
- 组合委托:多播委托可以同时指向多个方法,使用
+操作符或者Delegate.Combine方法将多个方法组合到一个委托中:
注意,对于返回值不为 void 的委托,多播时只会返回最后一个方法的返回值。public delegate void Notify(); // 返回类型为 void 的委托public class Process {public void MethodA() {Console.WriteLine("MethodA called");}public void MethodB() {Console.WriteLine("MethodB called");} }Process p = new Process(); Notify notifyDel = p.MethodA; notifyDel += p.MethodB; // 添加第二个方法 notifyDel(); // 依次调用 MethodA 和 MethodB
4. 委托的实际应用
- 事件处理:委托是 C# 事件模型的核心。事件通常由一个委托类型(例如
EventHandler)来定义,当事件触发时,所有注册的事件处理方法都会被调用。 - 回调机制:通过委托,可以实现回调方法,允许某个方法在执行完毕后通知其他方法执行特定逻辑。
- 灵活的设计模式:委托常用于策略模式、观察者模式等场景,提高代码的灵活性和可扩展性。
5. 总结
委托在 C# 中扮演着连接方法与调用者的桥梁角色,它使得程序能够更加灵活地处理方法调用、事件通知和回调等场景。通过类型安全、易于组合和传递,委托成为构建松耦合、可扩展系统的重要工具。
相关文章:
【C#】委托是什么
在 C# 中,委托(Delegate) 是一种类型安全的函数指针,可以将方法作为参数传递或者保存方法的引用。下面详细介绍一下委托的相关概念和用法: 1. 基本概念 类型安全:委托在声明时会指定方法的返回类型和参数…...
[Lc(2)滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接:209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…...
迷你世界脚本玩家接口:Player
玩家接口:Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …...
三、0-1搭建springboot+vue3前后端分离-springboot整合mybatis plus 之本地安装mysql
一、安装mysql: 官网下载:https://dev.mysql.com/downloads/mysql/?spm5176.28103460.0.0.40f75d27Stx4Xj 网盘分享:http://链接: https://pan.baidu.com/s/1mS_-VxrKAeRL3utBvD64gg?pwd6666 提取码: 6666 复制这段内容后打开百度网盘手机…...
市场趋势解析与交易策略优化
市场趋势解析与交易策略优化 在市场环境不断变化的情况下,理解市场趋势并优化交易策略是交易者稳健发展的关键。通过科学的方法识别市场动向,结合数据分析优化交易方案,可以提高交易效率并降低风险。本文将探讨趋势分析的要点,并介…...
Spring Boot 常用注解全解析:从核心到进阶的实践指南
目录 引言:为什么注解是Spring Boot开发者的“战略武器”? 一、核心启动注解 1.1 应用启动三剑客 二、Web开发注解 2.1 控制器层注解 三、依赖注入注解 3.1 依赖管理矩阵 四、数据访问注解 4.1 JPA核心注解 五、配置管理注解 5.1 配置绑定注解…...
如何优化FFmpeg拉流性能及避坑指南
FFmpeg作为流媒体处理的核心工具,其拉流性能直接影响直播/点播体验。本文从协议优化、硬件加速、网络策略三大维度切入,结合实战案例与高频踩坑点,助你突破性能瓶颈! 一、性能优化进阶:从协议到硬件的全链路调优 协议选…...
基础dp——动态规划
目录 一、什么是动态规划? 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划? 动态规划(Dynamic Programming&…...
通过微步API接口对单个IP进行查询
import requests import json# 微步API的URL和你的API密钥 API_URL "https://api.threatbook.cn/v3/ip/query" API_KEY "***" # 替换为你的微步API密钥 def query_threatbook(ip):"""查询微步API接口,判断IP是否为可疑"…...
LLM实践——DeepSeek技术报告学习(含实现逻辑梳理)
目录 一些基本概念:deepseek-r1-zerodeepseek-R1deepseek-R1 distill model: DeepSeek官网:https://www.deepseek.com/ 一些基本概念: post-training:旨在优化预训练模型的特定能力,包括任务适配性、安…...
Autojs无线连接vscode方法
1.获得电脑的IP 在电脑的CMD界面输入 ipconfig 然后找到ipv4的那一行,后面的即是你的电脑IP地址 2.打开vscode的autojs服务 安装autojs插件 在vscode界面按下ctrlshiftp 输入autojs 找到 点击 之后打开手机上的autojs 之后输入刚刚电脑上的地址 可以看到vsc…...
第一节:基于Winform框架的串口助手小项目---基础控件使用《C#编程》
本人于2025年3月2号学习C#编程,要学会一门编程语言,一定要有一个或多个项目的经验才能对着这门语言有深入的了解,为了深入了解和记录学习C#的学习过程,此文章作为足迹以此记录,为后期巩固学习以及参考奠定基础。内容涉…...
小红书湖仓架构的跃迁之路
作者:李鹏霖(丁典),小红书-研发工程师,StarRocks Contributor & Apache Impala Committer 本文整理自小红书工程师在 StarRocks 年度峰会上的分享,介绍了小红书自助分析平台中,StarRocks 与 Iceberg 结合后&#x…...
pytorch高可用的设计策略和集成放大各自功能
在使用 PyTorch 编写模型时,为确保模型具备高可用性,可从模型设计、代码质量、训练过程、部署等多个方面采取相应的方法,以下为你详细介绍: 模型设计层面 模块化设计 实现方式:将模型拆分成多个小的、独立的模块,每个模块负责特定的功能。例如,在一个图像分类模型中,可…...
神经网络前向微分和后向微分区别
1. 计算顺序 前向微分(前向模式) 从输入到输出逐层计算:沿计算图的正向顺序(输入层 → 输出层),同时计算函数值和导数。 每一步同步更新导数:每个中间变量的导数随值一起计算,例如&…...
Android 创建一个全局通用的ViewModel
(推荐)使用ViewModelStore 代码示例: class MyApplication : Application(), ViewModelStoreOwner {private val mViewModelStore ViewModelStore()override fun onCreate() {super.onCreate()}override val viewModelStore: ViewModelSto…...
windows 利用nvm 管理node.js 2025最新版
1.首先在下载nvm 下载链接 2. 下载最新版本的nvm 3. 同意协议 注意:选择安装路径 之后一直下一步即可 可以取消勾选 open with Powershell 勾选后它会自动打开Powershell 这里选用cmd 输入以下命令查看是否安装成功 nvm version 查看已经安装的版本 我之前自…...
基于物联网技术的电动车防盗系统设计(论文+源码)
1总体设计 本课题为基于物联网技术的电动车防盗系统,在此将整个系统架构设计如图2.1所示,其采用STM32F103单片机为控制器,通过NEO-6M实现GPS定位功能,通过红外传感器检测电瓶是否离开位,通过Air202 NBIOT模块将当前的数…...
run方法执行过程分析
文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…...
关联封号率降70%!2025最新IP隔离方案实操手册
高效运营安全防护,跨境卖家必看的风险规避指南 跨境账号管理的核心挑战:关联封号风险激增 2024年,随着全球电商平台对账号合规的审查日益严苛,“关联封号”已成为跨境卖家最头疼的问题之一。无论是同一IP登录多账号、员工操作失误…...
Cursor对话历史导出扩展:基于DOM逆向的AI协作数据备份方案
1. 项目概述:一个为开发者解放生产力的“数据保险箱”如果你和我一样,日常重度依赖 Cursor 这款 AI 编程神器,那你一定有过这样的焦虑:那些与 AI 深度对话产生的宝贵上下文、精心调教出的项目特定提示词、甚至是 AI 帮你重构的代码…...
nardeas/ssh-agent:增强版SSH代理工具的设计、部署与实战应用
1. 项目概述:一个被低估的SSH代理工具如果你和我一样,日常需要在多台服务器、开发机、跳板机之间穿梭,手里捏着十几把甚至几十把SSH密钥,那你一定对ssh-agent这个工具又爱又恨。爱的是,它确实能让你免去一遍遍输入密钥…...
CursorLearn2API:基于AI辅助编程的本地代码自动化部署为云端API实践
1. 项目概述:从本地代码到云端API的自动化桥梁最近在折腾一个挺有意思的项目,叫gmh5225/cursorlearn2api。乍一看这个标题,可能有点摸不着头脑,但如果你是一个经常在本地用 Cursor 这类 AI 辅助编程工具写代码,同时又想…...
NotebookLM智能摘要失效真相(附Google内部测试报告·仅限本期公开)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM智能摘要失效的底层归因分析 NotebookLM 的智能摘要功能在部分场景下出现语义断裂、关键信息遗漏或摘要长度异常(如仅输出“…”),其根本原因并非模型随机…...
树莓派5 vs 树莓派4:从硬件架构到应用场景的全面对比与实战指南
1. 项目概述:为什么我们需要重新审视树莓派5?如果你和我一样,从树莓派2、3、4一路用过来,每次新版本发布都像是一次“挤牙膏”式的升级,那么树莓派5的到来,绝对会打破你的固有印象。它不再仅仅是“更快一点…...
给电机上户口:ST-MC-Workbench里那些让人头大的参数到底怎么填?(附实测避坑清单)
给电机上户口:ST-MC-Workbench参数填写的工程实践指南 第一次打开ST-MC-Workbench的电机参数配置界面时,面对那些专业术语和空白输入框,大多数工程师都会感到一阵眩晕。LdLq、反电动势系数、转动惯量J...这些看似简单的参数背后,…...
TalkingHeads开源项目:基于扩散模型的AI人脸说话视频生成技术详解
1. 项目概述:当AI学会“眉目传情” 最近在折腾一个挺有意思的开源项目,叫TalkingHeads。简单来说,它能让一张静态的人脸照片“活”过来,不仅能根据你输入的音频或文本生成口型同步的说话视频,还能让视频里的人做出各种…...
火绒安全软件实战教程:快速查杀、全盘查杀、自定义查杀到底怎么选?
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
KAN神经网络在GPT架构中的可解释性实验与实现
1. 项目概述:当KAN神经网络遇上GPT,一场关于可解释性的实验最近在开源社区里,一个名为“kan-gpt”的项目引起了我的注意。这个项目将两个看似不相关的领域——KAN(Kolmogorov–Arnold Networks)神经网络和GPTÿ…...
