news 2026/7/25 16:16:52

C#委托:灵活方法调用的秘密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#委托:灵活方法调用的秘密

委托的概念

委托是一种引用类型,用于封装具有特定参数列表和返回类型的方法。它类似于函数指针,但提供了更高的安全性和灵活性。委托允许将方法作为参数传递、存储在变量中或从其他方法返回。

委托的声明与使用

委托的声明需要指定方法的签名(参数和返回类型)。例如:

delegate int MathOperation(int a, int b);

声明后,可以将任何匹配签名的方法赋值给委托实例:

int Add(int x, int y) => x + y; MathOperation operation = Add; int result = operation(3, 5); // 调用委托,结果为8

多播委托

委托支持多播,即一个委托实例可以绑定多个方法,调用时会按顺序执行所有方法。通过+=-=运算符添加或移除方法:

void LogStart() => Console.WriteLine("开始计算"); void LogEnd() => Console.WriteLine("计算结束"); MathOperation operation = Add; operation += (a, b) => { LogStart(); return a * b; }; operation += (a, b) => { LogEnd(); return 0; };

注意:多播委托的返回值通常是最后绑定的方法的返回值。

内置委托类型

.NET 提供了常用的内置委托类型,无需自定义:

  • Action:无返回值的方法(支持最多16个参数)。
  • Func:有返回值的方法(最后一个泛型参数为返回类型)。
  • Predicate<T>:返回布尔值的单参数方法。

示例:

Func<int, int, int> func = Add; Action<string> log = message => Console.WriteLine(message);

委托的应用场景

  1. 事件处理:委托是事件的基础,用于实现发布-订阅模式。
  2. 回调机制:将方法作为参数传递给异步操作或耗时任务。
  3. 策略模式:通过委托动态切换算法或行为。

匿名方法与Lambda表达式

C# 允许使用匿名方法或Lambda简化委托的声明:

MathOperation operation = delegate(int a, int b) { return a - b; }; // 或使用Lambda MathOperation operation = (a, b) => a / b;

注意事项

  • 委托实例不可变,+=-=会返回新实例。
  • 避免长时间持有委托引用,可能导致内存泄漏(如事件未注销)。
  • 多播委托的执行顺序与绑定顺序一致,但依赖此特性时需谨慎设计。

通过合理使用委托,可以提升代码的模块化和扩展性,尤其在需要动态行为或解耦的场景中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 6:35:13

webpack输出代码报错到指定文本文件

文章目录 概述代码 概述 在vscode的控制台输出的报错是有限的&#xff0c;多了就看不全了。想要看全部代码报错&#xff0c;就产生了如下方式&#xff1a; 代码 // 在package.json的scripts下&#xff0c;增加以下配置&#xff1a; start2: "set NO_COLOR1 && …

作者头像 李华
网站建设 2026/7/23 1:12:23

自然语言处理容易混淆知识点(二)BERT和BERTopic的区别

BERT和BERTopicBERT&#xff08;深度学习模型&#xff09;BERTopic&#xff08;主题建模工具包&#xff09;关系类比详细对比1. BERT&#xff1a;基础组件2. BERTopic&#xff1a;完整系统技术架构图关键区别表格实际代码对比**只用 BERT**使用 BERTopic常见混淆点澄清1. 名字为…

作者头像 李华
网站建设 2026/7/25 7:03:58

GPT-5.2与Gemini 3.0 Pro技术选型指南:核心能力对比+第三方API接入全攻略

随着生成式AI技术的持续突破&#xff0c;大模型已成为驱动开发者创新、企业数字化转型的核心动力。OpenAI最新推出的GPT-5.2与Google迭代的Gemini 3.0 Pro&#xff0c;凭借各自在核心能力上的升级&#xff0c;成为当前技术选型的热门候选。对于广大开发者而言&#xff0c;不仅需…

作者头像 李华
网站建设 2026/7/22 6:52:05

LangSmith:AI Agent开发者的效率神器,从OpenAI到LangChain都在用!

简介 LangSmith已成为事实上的Agent操作系统&#xff0c;通过可视化调试、自动化评估和数据闭环三位一体能力&#xff0c;将AI Agent从"黑盒"转变为"白盒"。开发者可快速定位问题、自动化测试、监控生产环境并形成数据飞轮&#xff0c;将开发时间从2-3个月…

作者头像 李华
网站建设 2026/7/25 8:53:26

智能图表生成:当数据分析从“怎么做图”变成“问什么”——某平台新工作流的技术解构与应用前瞻

传统的数据可视化流程是“获取数据-清洗数据-选择图表-调整格式-添加洞察”的线性链条&#xff1b;而AI驱动的智能图表生成&#xff0c;则是将数据与分析目标一并投入&#xff0c;输出“图表洞察”的集成解决方案。这不仅是效率的提升&#xff0c;更是从“可视化工具”到“数据…

作者头像 李华
网站建设 2026/7/23 19:23:28

4、VXLAN BGP EVPN基础解析

VXLAN BGP EVPN基础解析 1. 数据中心网络面临的挑战 随着云计算的发展&#xff0c;虚拟化技术得到了广泛应用。在传统网络中&#xff0c;数据流量主要是客户端和服务器之间的南北向流量&#xff0c;而虚拟化使得数据中心内的东西向流量大幅增加。东西向流量指的是数据中心内服…

作者头像 李华