news 2026/5/9 10:08:31

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/4/30 23:30:38

24、Perl编程入门:基础、应用与最佳实践

Perl编程入门:基础、应用与最佳实践 1. 读取密码文件中的用户名 在某些场景下,我们需要从系统的 /etc/passwd 文件中提取所有用户名。该文件以冒号分隔各个字段,第一个字段即为用户名。以下是一个使用 Perl 实现的脚本: open(PASSWORDS, "/etc/passwd"); wh…

作者头像 李华
网站建设 2026/5/8 13:36:34

UG高版本多轴联动开粗分享—东莞振华职校

UG 高版本&#xff08;如 NX1899 及以后&#xff09;新增了更智能的多轴动态开粗功能&#xff0c;能通过侧刃高效切削&#xff0c;还可灵活适配四轴、五轴加工场景&#xff0c;大幅提升复杂工件开粗效率。下面从核心操作流程、关键参数设置、优化技巧和避坑要点四方面展开分享&…

作者头像 李华
网站建设 2026/5/9 0:58:10

10BASE-T1S以太网技术实践:基于Microchip方案实现单对线50节点工业网络

文章目录1. 10BASE-T1S技术概述1.1 技术背景与发展1.2 技术特点与优势1.3 工业应用场景2. 系统架构设计2.1 整体网络架构2.2 硬件选型分析2.3 软件架构设计3. 开发环境搭建3.1 硬件开发环境3.2 软件开发环境3.3 测试工具准备4. 硬件设计与实现4.1 原理图设计4.2 PCB布局要点4.3…

作者头像 李华
网站建设 2026/5/3 18:10:06

5路红外循迹小车

所需模块&#xff1a;1.stm32f103c8t6核心板2.TB6612电机驱动模块1个3.5个红外循迹传感器4.4个电机通过左右电机产生差速来控制方向main.c#include "system.h" #include "stm32f10x.h" #include "SysTick.h" #include "motor.h" #incl…

作者头像 李华
网站建设 2026/5/7 16:40:37

前端面经整理,零基础入门到精通,收藏这篇就够了

目录 1&#xff09;html&#xff0c;http&#xff0c;web基础篇 进程和线程的区别&#xff1f; 如何理解html语义化&#xff1f;用过哪些html标签&#xff1f; h5新特性 canvas相关 cookie,session,localStorage区别&#xff0c;cookie的长度限制 什么是cookie隔离&…

作者头像 李华
网站建设 2026/5/8 18:15:19

2025年项目管理系统全新排名出炉:聚焦私有部署、信创适配与全流程闭环

在2025年&#xff0c;企业对项目管理系统的核心诉求已从基础的任务协同升级为“安全可控、合规适配、链路贯通”的综合能力考核。私有部署带来的数据主权保障、信创适配契合的国产化发展浪潮&#xff0c;以及全流程闭环实现的管理效率跃迁&#xff0c;成为衡量系统竞争力的三大…

作者头像 李华