发布时间:2026/8/16 6:26:22
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();// 输出按钮被点击了事件是对委托的进一步封装让代码更加安全、符合面向对象的设计原则

相关新闻

2026/8/16 6:21:22

AI智能体技术栈全解析:从Skill、MCP、RAG到Agent的工程实践

1. 从“黑话”到“白盒”:为什么我们需要拆穿这些AI概念?最近在AI圈子里,Skill、MCP、RAG、Agent、OpenClaw这些词快被说烂了。你随便点开一个技术分享,或者看一篇行业分析,这些术语就像弹幕一样往外蹦。但说实话&…

2026/8/16 6:21:22

VSCode集成Cppcheck:Windows下C++静态代码分析实战指南

1. 为什么要在VSCode里集成Cppcheck?一个C开发者的效率革命如果你是一个在Windows上写C的程序员,还在用“编译-运行-崩溃-调试”的循环来发现代码问题,那效率就太低了。很多隐藏的bug,比如内存泄漏、数组越界、未初始化变量&#…

2026/8/16 10:06:35

选对AI论文工具多睡 5 个整觉!高口碑工具盘点 + 避坑全攻略

每到毕业季,论文就成了压在学生心头的一座大山:选题毫无头绪、写初稿卡得死死的、格式改来改去总不对、查重结果红一片、AIGC检测风险还高悬,通宵熬夜成了家常便饭。很多人以为AI工具能一键生成整篇论文,结果一用就翻车&#xff0…

2026/8/16 10:06:35

3ds Max 2018核心工作流与实战优化指南

1. 项目缘起:为什么是3ds Max 2018? 如果你现在打开任何一个三维设计相关的招聘网站,或者去翻看一些大型项目(尤其是建筑可视化、游戏美术外包)的职位要求,你大概率还会看到一个熟悉又有点“古老”的名字&a…

2026/8/16 10:06:35

Obsidian中文插件市场Chinese Market:解决网络访问与中文生态难题

如果你正在使用 Obsidian 管理知识,但苦于官方插件市场访问不畅、英文界面不便,那么今天要介绍的这个项目,就是为你准备的。 Chinese Market 是一个由国内开发者维护的 Obsidian 第三方插件市场,它并非简单的镜像,而…

2026/8/16 0:00:35

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

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

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/16 0:00:35

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

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

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/15 4:56:16

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…