c#学习 8.15委托
委托讲解1.什么是委托usingSystem;namespaceDelegateDemo{internalclassProgram{// delegate委托代理的意思// 声明一个委托类型它可以指向“没有参数、没有返回值”的方法delegatevoidNoParamDelegate();// 声明一个委托类型它可以指向“有一个int参数、没有返回值”的方法delegatevoidIntParamDelegate(intvalue);// 该方法签名与 NoParamDelegate 一致无参无返回值staticvoidShowWelcome(){Console.WriteLine(欢迎来到委托的世界);}// 该方法签名与 IntParamDelegate 一致一个int参数无返回值staticvoidCheckInvestment(intmoney){if(money500)Console.WriteLine(允许加盟);elseConsole.WriteLine(条件不满足);}staticvoidMain(string[]args){// 直接调用方法ShowWelcome();// 使用委托来代理方法NoParamDelegatedel1newNoParamDelegate(ShowWelcome);del1();// 与 ShowWelcome() 等价IntParamDelegatedel2newIntParamDelegate(CheckInvestment);del2(1000);// 与 CheckInvestment(1000) 等价}}}委托就是一个“方法的指针”就像你用变量保存一个数字int a 5委托让你保存一个方法然后像调用方法一样去调用它。del1里存的是ShowWelcome这个方法调用del1()就相当于调用ShowWelcome()。规则委托的签名参数个数、类型、返回值必须和它指向的方法完全一致。2.委托的作用1.把方法当作参数传递你可以把一个方法传给另一个方法让后者决定何时调用。2.实现回调比如按钮点击后系统自动调用你写的方法这就是事件本质是委托。3.解耦代码你不需要在代码里写一堆if-else而是把不同的行为存成委托需要时直接调用。可以将一个包含代码实现和使用时机的方法解耦为,把方法当作变量传递(即委托)给另一个方法一个只负责判断什么时候调用一个只负责代码对的实现互不打扰// 定义一个委托类型delegatevoidMyDelegate(stringmessage);// 一个负责“实现”的方法voidSayHello(stringname)Console.WriteLine($你好{name});// 一个负责“调用时机”的方法voidExecuteAtMidnight(MyDelegateaction){if(DateTime.Now.Hour0)action(世界);// 到点了才真正调用}// 使用把实现绑定到委托然后传给调用者MyDelegatedSayHello;ExecuteAtMidnight(d);3.系统预定义的委托Action 和 FuncAction指向没有返回值的方法可以有0~16个参数。Action → 无参无返回值Action → 一个int参数无返回值Actionstring, int → 两个参数无返回值Func指向有返回值的方法。Func → 无参返回intFuncint, bool → 一个int参数返回bool里最后的类型是返回类型其他的都为参数类型delegateintMathOperation(inta,intb);//声明委托staticintAdd(inta,intb)ab;//方法staticvoidMain(string[]args){MathOperationopt1Add;}staticvoidMain(string[]args){Funcint,int,intMathOperation1Add;//有两个int参数和int返回值}两者等价Func是系统已经声明好的可以直接拿来用4.匿名方法和Lambda表达式staticintAdd(inta,intb)ab;//方法staticvoidMain(string[]args){Funcint,int,intMathOperation1Add;//有两个int参数和int返回值}//匿名方法staticvoidMain(string[]args){// 方法的两个参数 返回值 具体代码Funcint,int,intMathOperation1delegate(inta,intb){returnab};}//Lambda表达式staticvoidMain(string[]args){//编译器会根据你声明的委托类型比如 Funcint, int, int//来自动推断 Lambda 表达式中参数的类型。Funcint,int,intMathOperation1(a,b)ab;}匿名方法顾名思义就是省略方法的名字直接在委托赋值时写具体的代码实现包括了参数和返回值 不需要另外定义方法Lambda表达式要比匿名方法更简洁5.多播委托voidHello()Console.Write(Hello );voidWorld()Console.Write(World);voidExclamation()Console.Write(!);staticvoidMain(string[]args){Actiona1Hello;Actiona2World;Actiona3Exclamation;a1();a2();a3();//输出: Hello World!}staticvoidMain(string[]args){Actiona1Hello;a1World;a1Exclamation;a1();//输出相同//移除方法a1-World;a1-Exclamation;a1();//输出Hello}多播委托指的是一个委托实例可以同时引用多个方法。当你调用这个委托时它会按照方法被添加的顺序依次执行每一个方法。返回值仅保留最后一个方法的返回值。异常影响如果其中一个方法抛出异常后续方法将不会执行。如需独立处理每个方法可以使用GetInvocationList()逐个调用并捕获异常。6.委托与事件事件是 C# 中基于委托实现的特殊成员。通过event关键字我们可以定义一个事件外部只能通过和-添加或移除处理方法而不能直接触发事件只能在声明事件的类内部触发。publicclassButton{// 声明一个事件类型是 ActionpubliceventActionOnClick;publicvoidClick(){// 触发事件调用所有注册的方法OnClick?.Invoke();}}// 使用ButtonbtnnewButton();btn.OnClick()Console.WriteLine(按钮被点击了);btn.Click();// 输出按钮被点击了事件是对委托的进一步封装让代码更加安全、符合面向对象的设计原则

相关新闻

半导体芯片裸片显微损伤缺陷分割数据集labelme格式4532张7类别

半导体芯片裸片显微损伤缺陷分割数据集labelme格式4532张7类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):4532标注数量(json文件个数):4532标注类别数:7标注类别名称:["huahen","keliwu","piqkeliw…

2026/8/17 7:30:48 阅读更多 →
长期免费的数据库方案——零成本基建系列

长期免费的数据库方案——零成本基建系列

长期免费的数据库方案——零成本基建系列 做完前面几篇零成本 API 的整理后,数据库这一块花了更久。原因很简单:很多“免费数据库”的介绍只写了注册时送多少额度,却没写清楚额度会不会重置、闲置会不会暂停,或者把缓存服务也算成…

2026/8/16 6:26:57 阅读更多 →
Claude Code部署与实战指南:从零搭建AI编程助手到企业级应用

Claude Code部署与实战指南:从零搭建AI编程助手到企业级应用

如果你是一名开发者,最近一定在各种技术社区和社交平台上频繁看到“Claude Code”这个名字。它被描述为“下一代AI编程助手”、“代码生成的革命”,甚至有人宣称它将彻底改变开发工作流。但当你真正想去尝试时,却发现信息极其混乱&#xff1a…

2026/8/16 6:26:57 阅读更多 →

最新新闻

构建开放、可靠、可协作的AI智能体框架:从设计理念到工程实践

构建开放、可靠、可协作的AI智能体框架:从设计理念到工程实践

1. 项目概述:为什么我们需要一个“开放、可靠、集体”的AI智能体框架? 最近和几个做AI应用落地的朋友聊天,大家普遍有个共同的痛点:现在市面上各种AI智能体(AI Agent)框架层出不穷,每个都宣称自…

2026/8/17 9:06:29 阅读更多 →
DeepSeek-V4-Pro原生支持OpenAI API:无缝迁移与配置指南

DeepSeek-V4-Pro原生支持OpenAI API:无缝迁移与配置指南

DeepSeek-V4-Pro 正式版来了,这次的重点不是模型参数有多强,而是它原生支持了 OpenAI 的 Responses API,并且专门针对 Codex 这类开发工具做了适配。这意味着,如果你之前在用 OpenAI 的 API 做开发,或者在使用基于 Ope…

2026/8/17 9:06:29 阅读更多 →
Linux后台任务管理:、nohup与disown的原理与应用

Linux后台任务管理:、nohup与disown的原理与应用

1. 项目概述:理解Linux后台任务管理的核心价值 在Linux服务器运维、数据分析或者日常开发中,我们经常会遇到一个经典场景:你通过SSH连接到一台远程服务器,启动了一个需要运行数小时甚至数天的数据处理脚本、一个Web服务&#xff0…

2026/8/17 9:06:29 阅读更多 →
时变MVAR参数估计与双EKF在脑电信号分析中的应用

时变MVAR参数估计与双EKF在脑电信号分析中的应用

1. 项目概述:时变MVAR参数估计的挑战与解决方案 在信号处理领域,时变多变量自回归(MVAR)模型参数估计一直是个棘手问题。传统最小二乘法在面对非平稳信号时表现乏力,而我在最近的心电信号分析项目中就深刻体会到了这一点——当我们需要实时跟…

2026/8/17 9:06:29 阅读更多 →
蚁群算法原理与工程实践:从TSP到VRP的智能优化方案

蚁群算法原理与工程实践:从TSP到VRP的智能优化方案

1. 从自然到代码:蚁群算法的核心思想与工程价值如果你在寻找一种能解决复杂路径规划、任务调度甚至网络路由问题的智能算法,而传统的穷举或贪心策略又显得力不从心,那么蚁群算法(Ant Colony Optimization, ACO)绝对值得…

2026/8/17 9:06:29 阅读更多 →
HC32单片机开发实战:从环境搭建到低功耗调试的避坑指南

HC32单片机开发实战:从环境搭建到低功耗调试的避坑指南

1. 项目概述:为什么HC32单片机值得关注,又为何“坑”多?最近几年,国产MCU(微控制器)的崛起势头很猛,其中华大半导体(HDSC)的HC32系列单片机凭借不错的性价比和供货稳定性…

2026/8/17 9:05:28 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →