news 2026/9/2 21:30:56

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/9/1 5:20:15

自然语言处理容易混淆知识点(一)c-TF-IDF和TF-IDF的区别

c-TF-IDF 和 TF-IDF 什么是 c-TF-IDF&#xff1f;传统 TF-IDFc-TF-IDF&#xff08;基于类的 TF-IDF&#xff09; c-TF-IDF 的计算公式直观理解在 BERTopic 中的工作流程代码示例&#xff1a;使用 c-TF-IDF与传统 TF-IDF 对比c-TF-IDF 的优势自定义 c-TF-IDF 参数可视化 c-TF-ID…

作者头像 李华
网站建设 2026/9/2 20:35:34

AI时代裁员潮真相:是AI夺走了工作,还是企业转型的必然?

简介 文章探讨了科技行业裁员潮中AI的真实角色。AI虽提高效率降低成本&#xff0c;但经济下行、过度扩张和市场竞争也是重要因素。企业正进行战略转型&#xff0c;将资源从传统业务转向AI领域&#xff0c;这不仅是成本削减&#xff0c;更是人才结构重构。AI带来的是劳动力转型&…

作者头像 李华
网站建设 2026/9/1 8:07:21

GEO 3小问:一文搞懂 AI 搜索时代的 “品牌曝光关键”

1. 问&#xff1a;到底什么是 GEO&#xff1f;和传统搜索优化不一样吗&#xff1f;答&#xff1a;GEO 全称 “AI 搜索优化”&#xff0c;核心是让品牌精准出现在用户用 AI 提问的答案里 —— 比如用户问 AI “北京靠谱的装修公司”“国产好口碑奶粉”&#xff0c;GEO 能让你的品…

作者头像 李华
网站建设 2026/9/2 6:45:26

5、VXLAN与BGP EVPN的融合:数据中心网络的优化方案

VXLAN与BGP EVPN的融合&#xff1a;数据中心网络的优化方案1. VXLAN的优势与不足在当今的数据中心环境中&#xff0c;支持软件和硬件VTEP&#xff08;虚拟隧道端点&#xff09;的混合环境已成为常态。VXLAN&#xff08;虚拟可扩展局域网&#xff09;为解决网络扩展性差、增强网…

作者头像 李华
网站建设 2026/9/1 5:19:59

11、数据中心网络底层路由与多播流量处理解析

数据中心网络底层路由与多播流量处理解析1. 网络维护时的隔离操作在网络维护或其他可能造成干扰的操作期间&#xff0c;可通过关闭与网络虚拟边缘&#xff08;NVE&#xff09;或虚拟隧道端点&#xff08;VTEP&#xff09;关联的第一个环回接口&#xff0c;从底层路由的角度隔离…

作者头像 李华
网站建设 2026/9/2 16:33:52

前端项目打包详细,零基础入门到精通,收藏这篇就够了

项目打包命令为&#xff1a;npm run build 打包后会文件夹中自动生成一个dist文件 这个文件就是最终上传服务器的文件&#xff08;或者将这个dist给后端&#xff09; dist中的index打开是本地看不见什么的。如果想查看项目 ---- 1.在config目录中找到index。js build: { // …

作者头像 李华