news 2026/8/6 7:34:42

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/8/6 8:00:39

26、UNIX和Linux系统的安全、卸载及相关资源介绍

UNIX和Linux系统的安全、卸载及相关资源介绍 1. 系统安全 确保计算机系统的安全是至关重要的,但完全杜绝安全漏洞几乎是不可能的。如果想要绝对安全,需要断开网络连接,并且不加载任何支持宏的程序或文档,然而这并不现实。因此,我们需要采取多种措施来提高联网计算机的安…

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

Web 服务和 SFTP 用户 操作目录

1 查看 web 用户ps aux | grep httpd2 将SFTP 用户加入web服务组sudo usermod -aG www-data sftpuser #组名 用户名3 设置目录归属和权限# 设置目录归属&#xff1a;所有者为 www-data&#xff0c;组为 www-datasudo chown -R www-data:www-data /var/www/html/project# 设置目…

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

为什么越来越多企业开始重视 SLA?

一、当 IT 成为业务基础设施&#xff0c;“感觉慢”已经不再是一个可接受的评价在早期阶段&#xff0c;企业对 IT 的期待往往很朴素&#xff1a;系统能用、问题有人管、出事能修好就行。但随着业务数字化程度不断提高&#xff0c;IT 已经从后台支持角色&#xff0c;逐步演变为业…

作者头像 李华
网站建设 2026/8/6 21:59:22

POD 模式深度解析:跨境电商从搬运到价值创造的转型

跨境电商领域&#xff0c;大量卖家陷入困境&#xff1a;投入大量广告获取流量&#xff0c;利润却被传统供应链层层吞噬&#xff0c;问题的根源&#xff0c;往往在于起点——被动接收的传统货盘&#xff0c;这种模式如同无形的枷锁&#xff0c;正通过三大陷阱限制着卖家的潜力&a…

作者头像 李华
网站建设 2026/8/3 23:37:40

PHP 8.6 新增 clamp() 函数

PHP 8.6 的 clamp() 函数可以把一个值限制在指定的最小值与最大值之间。 它的签名如下&#xff1a; clamp(mixed $value, mixed $min, mixed $max): mixed clamp() 接收三个参数&#xff1a;$value、$min、$max&#xff0c;然后判断 $value 是否在 $min 与 $max&#xff08;包…

作者头像 李华