C#委托、事件和lambda表达式
委托委托就像是方法的类型有了委托就可以把方法当参数传来传去或者在一个变量里随时换掉要执行的方法。// 1. 声明一个委托类型定义我能代表哪种方法 public delegate void MyDelegate(string msg); // 2. 写一个符合签名的方法 public static void ShowMessage(string text) { Console.WriteLine($消息{text}); } // 3. 使用 MyDelegate del ShowMessage; // 把方法赋值给委托变量 del(Hello); // 调用委托相当于调用 ShowMessage大多数情况下不需要自己声明委托直接用系统自带的就行。// Action 示例无返回值 Actionstring print s Console.WriteLine(s); print(直接用 Action); // Func 示例有返回值 Funcint, int, int add (a, b) a b; int result add(3, 4); // 7委托可以串联多个方法调用一次就会按顺序执行全部也就是多播。Action act MethodA; act MethodB; act MethodC; act(); // 依次执行 A、B、C // 移除方法 act - MethodB;事件事件就是加了限制的委托比如只能从外部“订阅”和“取消订阅”不能直接触发或覆盖。相当于给委托封装了一下。下面举个例子// 定义一个事件发布者 public class Button { // 事件外部可以订阅但不能随意触发 public event EventHandler? Clicked; // 模拟点击按钮 public void Click() { Console.WriteLine(按钮被点击了); // 触发事件只能在类内部触发 Clicked?.Invoke(this, EventArgs.Empty); } } // 使用 class Program { static void Main() { Button btn new Button(); // 订阅事件用 btn.Clicked OnButtonClicked; // 触发点击 btn.Click(); // 取消订阅用 - btn.Clicked - OnButtonClicked; // btn.Clicked.Invoke(null, null); ❌ 编译错误外部不能触发 // btn.Clicked null; ❌ 编译错误外部不能赋值 } static void OnButtonClicked(object? sender, EventArgs e) { Console.WriteLine(事件处理按钮被点击了); } }输出是按钮被点击了 事件处理按钮被点击了在.NET中推荐是使用EventHandler和EventHandlerT它有两个参数public event EventHandlerCustomEventArgs? DataReceived;标准写法是public class DataProcessor { // 声明事件使用标准 EventHandlerT public event EventHandlerProcessCompletedEventArgs? ProcessCompleted; public void StartProcess() { // 模拟处理 Console.WriteLine(处理中...); Thread.Sleep(1000); // 处理完成触发事件 OnProcessCompleted(10); // 假设处理了10条数据 } // 受保护的触发方法约定On 事件名 protected virtual void OnProcessCompleted(int count) { ProcessCompleted?.Invoke(this, new ProcessCompletedEventArgs(count)); } } // 自定义事件参数类 public class ProcessCompletedEventArgs : EventArgs { public int RecordCount { get; } public ProcessCompletedEventArgs(int count) RecordCount count; } // 使用 class Program { static void Main() { var processor new DataProcessor(); processor.ProcessCompleted (sender, e) { Console.WriteLine($处理完成共 {e.RecordCount} 条数据); }; processor.StartProcess(); } }Lambda表达式lambda表达式就是匿名方法的简写是C#中最常用最实用的特性之一。传统写法// 定义方法 bool IsEven(int x) { return x % 2 0; } // 使用 Listint numbers new Listint{1,2,3,4,5}; var evens numbers.Where(IsEven);lambda写法var evens numbers.Where(x x % 2 0);最直观的看到lambda写法少写了三行代码显著减少了代码冗余。lambda可以捕获外部变量也就是闭包int multiplier 3; Funcint, int multiply x x * multiplier; // 捕获了 multiplier int result multiply(5); // 15 multiplier 10; result multiply(5); // 50外部变量变化Lambda 也跟着变但在循环中捕获变量时很容易造成“延迟执行”的问题。var actions new ListAction(); for (int i 0; i 3; i) { actions.Add(() Console.WriteLine(i)); // 捕获同一个 i } foreach (var action in actions) { action(); // 输出 3, 3, 3 而不是 0,1,2 }解决方法也很简单就是在循环内局部复制一份for (int i 0; i 3; i) { int copy i; // 每次循环新建一个变量 actions.Add(() Console.WriteLine(copy)); } // 输出 0,1,2一般情况下编译器会根据上下文推断lambda的类型只有上下文不够明确时才需要显示声明类型// ❌ 错误无法推断 var lambda x x * 2; // ✅ 正确明确委托类型 Funcint, int lambda x x * 2;

相关新闻

【高阶·安全】如何构建 AI Agent 的纵深防御体系:从 OWASP ASI 威胁建模到工具沙箱、最小权限与行为审计

【高阶·安全】如何构建 AI Agent 的纵深防御体系:从 OWASP ASI 威胁建模到工具沙箱、最小权限与行为审计

【高阶安全】如何构建 AI Agent 的纵深防御体系:从 OWASP ASI 威胁建模到工具沙箱、最小权限与行为审计 专栏:《AI 工程与安全深度实战》 第10轮第2篇 核心痛点:一个能自己规划、自己调工具、还带持久记忆的 Agent,被一段藏在网页里的文字接管后,用它"合法"的权…

2026/7/23 2:42:57阅读更多 →
共享发现悖论:为何精准搜索反而导致信息同质化困境

共享发现悖论:为何精准搜索反而导致信息同质化困境

你有没有遇到过这种情况:明明搜索引擎返回的结果越来越“准确”,但找到真正有用的信息却越来越难?你输入一个具体问题,得到的不是多样化的参考,而是一堆高度相似的答案,它们都指向同一个“标准”解释。表面…

2026/7/23 2:42:57阅读更多 →
AI实验室:智能科研工作流与虚拟实验环境解析

AI实验室:智能科研工作流与虚拟实验环境解析

1. 项目概述:AI实验室的诞生背景作为一名长期在科研一线工作的技术专家,我最近被Claude团队推出的"AI实验室"功能彻底改变了工作方式。这个看似简单的概念背后,实际上构建了一个完整的虚拟研究环境——它把传统实验室里那些昂贵的仪…

2026/7/23 2:40:57阅读更多 →
基于TM4C1294NCPDT的CAN总线底层驱动开发与寄存器级配置详解

基于TM4C1294NCPDT的CAN总线底层驱动开发与寄存器级配置详解

1. 项目概述与核心价值在汽车电子、工业控制这些对通信可靠性要求极高的领域,控制器局域网(CAN)总线几乎是工程师绕不开的技术。它不像我们日常用的USB或者以太网,CAN总线天生就是为多节点、高实时性、强抗干扰的分布式系统设计的…

2026/7/23 3:59:09阅读更多 →
python代码分析nginx访问日志

python代码分析nginx访问日志

本人网站使用内网穿透,分析结结果IP都是内网地址。统计结果 总访问量:641805 独立IP数:14 最活跃IP:192.168.1.29(访问492948次) 访问高峰时段:16时(59997次) 图表已保存…

2026/7/23 3:59:09阅读更多 →
智能驾驶(L2)相关法规以及标准

智能驾驶(L2)相关法规以及标准

类型名称说明实施日期法规中国智能网联汽车技术规程(C-ICAP)旨在建立高标准、公平和客观的车辆智能网联性能评价方法,以促进车辆智能网联技术的发展,追求更高的智能化、网联化发展理念。给消费者提供新车上市车辆的智能网联性能信…

2026/7/23 3:59:09阅读更多 →
《如何搭建:“数字人宣讲视频 + Flask 展示页”的演示系统》

《如何搭建:“数字人宣讲视频 + Flask 展示页”的演示系统》

本文记录一次“数字人宣讲视频 Flask 展示页”的搭建过程。项目主题是面向青年大学习场景做一个名为“红厅智播”的演示系统:先在魔珐星云控制台配置数字人形象、音色和场景,再整理 SSML 宣讲脚本生成视频,最后用一个简单的 Flask 页面把视频…

2026/7/23 3:59:09阅读更多 →
2026年语音识别准确率低推荐3个专业挑选标准帮你选对工具

2026年语音识别准确率低推荐3个专业挑选标准帮你选对工具

2026年不少效率工具爱好者反馈,用过很多语音识别工具,还是经常遇到准确率低、错漏多的问题,转写完还要花几小时校对,没法直接用稿。这里给你3个专业挑选标准,还整理了符合标准的工具清单,帮你快速选到适配需…

2026/7/23 3:59:09阅读更多 →
爬虫转大模型:采集能力变现,为何上线第一天就卡在权限与日志?

爬虫转大模型:采集能力变现,为何上线第一天就卡在权限与日志?

聊《爬虫转大模型实战,第一道门槛可能不是算法》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&#xff0…

2026/7/23 3:57:09阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →