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/10/11 0:36:44 阅读更多 →
长期免费的数据库方案——零成本基建系列

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

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

2026/10/11 2:25:49 阅读更多 →
Claude Code部署与实战指南:从零搭建AI编程助手到企业级应用

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

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

2026/10/11 1:28:41 阅读更多 →

最新新闻

二手车交易数据分析与可视化:从清洗到交互看板的完整实践

二手车交易数据分析与可视化:从清洗到交互看板的完整实践

简介:二手车交易数据分析与可视化系统是一份面向数据分析学习者与前端开发者的综合实战资源。项目整合网络爬虫、前后端分离架构、MySQL数据库存储以及Pandas/NumPy数据分析流程,最终通过Echarts、Plotly等交互式图表呈现二手车价格、里程与市场趋势&…

2026/10/11 2:25:01 阅读更多 →
LOL数据集与YOLOv8实战:从格式转换到小目标检测避坑指南

LOL数据集与YOLOv8实战:从格式转换到小目标检测避坑指南

简介:面向LOL英雄联盟角色检测任务,数据集包含3000张对局截图,提供Pascal VOC与YOLO两种标注格式,覆盖己方小兵、敌方小兵、己方防御塔、敌方防御塔、LUX、VAYNE共6类目标,总计24665个标注框,适合训练YOLO系…

2026/10/11 2:25:01 阅读更多 →
API测试的数据管理:从分类、隔离到清理的系统化实践

API测试的数据管理:从分类、隔离到清理的系统化实践

对不少做API测试的人来说,工作里最磨人的其实不是怎么写脚本,而是“用什么数据去跑脚本”。我参与过好几个接口自动化测试项目,真正让用例反复失败、需要半夜爬起来重跑、甚至让测试结果被质疑的,十有八九都跟测试数据有关。明明接…

2026/10/11 2:25:01 阅读更多 →
Python深度学习CNN水果识别系统实战:从数据集到部署全流程

Python深度学习CNN水果识别系统实战:从数据集到部署全流程

简介:这份资源是面向计算机相关专业学生与项目实战学习者的深度学习实战项目,以Python结合CNN卷积神经网络实现水果图像识别,可直接用于毕业设计、期末大作业或课程实践,难度适中,适合具备一定Python与机器学习基础、希…

2026/10/11 2:25:01 阅读更多 →
百家CMS黑盒测试实战:从用例设计到缺陷提交全流程

百家CMS黑盒测试实战:从用例设计到缺陷提交全流程

接到“百家cms 黑盒测试”这个任务时,我第一反应不是翻源码,而是把系统装进测试环境,像普通网站管理员一样从登录页开始点。黑盒测试说白了,就是不关心系统内部用的是什么语言、表结构怎么设计、代码里有没有注释,只看…

2026/10/11 2:25:01 阅读更多 →
通达OA 2017授权机制解析与合法注册重建指南

通达OA 2017授权机制解析与合法注册重建指南

简介:本资源提供通达OA 2017版本的注册与授权支持文件,面向企业信息化管理员、OA系统实施人员及二次开发技术人员,用于解决正版授权受限、部署次数受限或功能模块被锁定等实际运维问题。压缩包共5个文件,含2个关键.dat授权数据文件…

2026/10/11 2:24:01 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →