精:C# 的四种委托实现详解

一、什么是委托

1.1 官方解释

委托是一种定义方法签名的类型。当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联,并通过委托实例调用该方法。

1.2 个人理解

委托就是用于封装和执行方法(函数)的一个类。

事件是一种特殊的委托。


二、如何声明委托

C# 中有四种常见的委托声明方式:

2.1delegate(自定义委托)

public delegate int TestDelegate(int x, int y);
  • 可以无返回值,也可以指定返回值类型。

  • 支持0 到 32 个参数

2.2Action(无返回值泛型委托)

  • 无返回值(即返回void)。

  • 支持0 到 16 个参数

示例:

  • Action:无参,无返回值。

  • Action<int, string>:接收intstring参数,无返回值。

  • Action<int, string, bool>:三个参数,无返回值。

  • Action<int, int, int, int>:四个int参数,无返回值。

2.3Func(有返回值泛型委托)

  • 必须有返回值(不能为void)。

  • 支持0 到 16 个输入参数,最后一个泛型参数为返回类型。

示例:

  • Func<int>:无参,返回int

  • Func<object, string, int>:接收objectstring,返回int

  • Func<T1, T2, T3, int>:三个泛型输入参数,返回int

2.4Predicate(布尔返回值泛型委托)

  • 仅接受一个参数

  • **返回值固定为bool**。

示例:

  • Predicate<int>:接收int,返回bool

  • 定义形式:public delegate bool Predicate<T>(T obj);

2.5 四者之间的区别总结

委托类型

参数数量范围

返回值要求

delegate

0 ~ 32

可无返回值,也可指定类型

Action

0 ~ 16

无返回值(void

Func

0 ~ 16(+1 返回值)

必须有返回值

Predicate仅 1 个

返回值固定为bool

注:部分资料中提到 Action/Func 最多支持 4 个参数,这是早期 .NET 版本限制;现代 C#(.NET Framework 4.0+ / .NET Core)已支持最多16 个参数


三、委托的使用示例

3.1delegate的使用

public delegate int MethodDelegate(int x, int y); private static MethodDelegate method; static void Main(string[] args) { method = new MethodDelegate(Add); Console.WriteLine(method(10, 20)); // 输出:30 Console.ReadKey(); } private static int Add(int x, int y) => x + y;

3.2Action的使用

static void Main(string[] args) { Test<string>(Action, "Hello World!"); Test<int>(Action, 1000); Test<string>(p => Console.WriteLine("{0}", p), "Lambda Hello"); Console.ReadKey(); } public static void Test<T>(Action<T> action, T p) => action(p); private static void Action(string s) => Console.WriteLine(s); private static void Action(int s) => Console.WriteLine(s);

Action常用于执行操作,无需返回结果。

3.3Func的使用

static void Main(string[] args) { Console.WriteLine(Test<int, int>(Fun, 100, 200)); // 输出:300 Console.ReadKey(); } public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b) => func(a, b); private static int Fun(int a, int b) => a + b;

Func常用于需要返回计算结果的场景。

3.4Predicate的使用

static void Main(string[] args) { Point[] points = { new Point(100, 200), new Point(150, 250), new Point(250, 375), new Point(275, 395), new Point(295, 450) }; Point first = Array.Find(points, ProductGT10); Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y); Console.ReadKey(); } private static bool ProductGT10(Point p) => p.X * p.Y > 100000;

Predicate常用于集合筛选(如Array.Find,List.FindAll等)。


四、委托的清空

4.1 方法一:循环移除

public MethodDelegate OnDelegate; public void ClearDelegate() { while (OnDelegate != null) { OnDelegate -= OnDelegate; } }

⚠️ 注意:此写法在多线程环境下可能不安全,且逻辑上存在争议(每次减去自身可能导致未完全清除)。更推荐方法二。

4.2 方法二:使用GetInvocationList

public MethodDelegate OnDelegate; static void Main(string[] args) { Program test = new Program(); if (test.OnDelegate != null) { Delegate[] dels = test.OnDelegate.GetInvocationList(); foreach (var del in dels) { test.OnDelegate -= (MethodDelegate)del; } } }

此方法安全可靠,适用于多播委托的彻底清空。


五、委托的特点

  • 类似于 C++ 的函数指针,但类型安全

  • 允许将方法作为参数传递

  • 可用于实现回调机制

  • 支持多播(多个方法绑定到同一个委托,依次调用)。

  • 方法签名不必完全一致(协变/逆变支持)。


六、总结

类型

参数数量

返回值

典型用途

delegate

0–32

任意或无

自定义委托

Action

0–16

无(void

执行操作

Func

0–16

必须有

计算并返回结果

Predicate

1

bool

条件判断、筛选


参考资料:

  • http://www.fengfly.com/plus/view-209140-1.html

  • http://www.cnblogs.com/foolishfox/archive/2010/09/16/1827964.html

  • https://www.cnblogs.com/akwwl/p/3232679.html

  • https://www.cnblogs.com/xiao-qian/p/12688043.html

- EOF -

技术群:添加小编微信dotnet999

公众号:dotnet讲堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1188704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产DevSecOps工具崛起:安全左移战略下的技术创新与市场重构

国产DevSecOps工具崛起&#xff1a;安全左移战略下的技术创新与市场重构 随着数字化转型进入深水区&#xff0c;软件开发的安全需求正在发生根本性变革。Gartner最新预测显示&#xff0c;到2025年中国DevSecOps工具市场将突破78亿元规模&#xff0c;年复合增长率高达42%&#x…

震惊!90%的AI从业者忽略了这些职业发展技巧

AI浪潮下的测试职业警钟 在2026年的今天&#xff0c;人工智能&#xff08;AI&#xff09;已渗透到软件开发的每个角落&#xff0c;但一个令人震惊的数据浮出水面&#xff1a;90%的AI从业者——包括开发者、数据科学家和测试工程师——忽视了关键的职业发展技巧。尤其对于软件测…

耐达讯自动化Profibus总线光纤中继器:光伏逆变器通讯的“稳定纽带”

在光伏发电系统中&#xff0c;实时数据采集与精准控制是保障发电效率与系统安全的核心。光伏逆变器作为能量转换的关键设备&#xff0c;其运行状态需与中央控制系统实时交互。然而&#xff0c;传统Profibus总线在长距离、强干扰环境下易出现信号衰减或中断。耐达讯自动化Profib…

‌软件测试员如何年薪翻倍的5个策略

在当今竞争激烈的软件测试行业&#xff0c;薪资增长已成为从业者关注的核心议题。随着技术迭代加速和企业对质量要求的提升&#xff0c;软件测试员面临双重挑战&#xff1a;一方面&#xff0c;自动化与AI的普及可能挤压基础测试岗位&#xff1b;另一方面&#xff0c;具备高阶技…

多商户+多端一体化:商城系统的核心功能架构与源码实现

温馨提示&#xff1a;文末有资源获取方式寻找一款既能自主创业&#xff0c;又能开启技术服务业务的电商系统&#xff1f;您的需求&#xff0c;现在有了完美的答案。我们为您带来一款经过重磅升级、功能堪称豪华的多端多商户商城源码&#xff0c;它专为有远见的创业者与开发者设…

AI技术分析股票财报

AI技术已经从简单的“数据提取”进化为深度的“策略参谋”&#xff0c;彻底重塑了股票财报分析的流程。以下是AI在该领域的核心应用场景。1. 深度非结构化数据处理传统的财报分析往往集中在利润表、资产负债表等硬性指标。AI利用自然语言处理 (NLP) 技术&#xff0c;能够瞬间穿…

开源商用级的多端多商户万能DIY商城系统全功能源码指南

温馨提示&#xff1a;文末有资源获取方式该系统不仅仅是一个交易工具&#xff0c;更是一个集用户连接、互动营销、数据沉淀于一体的综合性运营平台。它通过全渠道覆盖和深度运营功能&#xff0c;帮助企业将流量真正转化为可重复触达、可持续增值的客户资产。源码获取方式在源码…

5个步骤:从软件测试新手到行业专家的2026指南

软件测试行业在2026年正经历深刻变革&#xff0c;AI驱动测试、自动化深化和全栈质量保障成为核心趋势。本文为从业者提供一条系统化成长路径&#xff0c;从新手到专家划分为五个步骤&#xff0c;每个步骤基于行业数据和最佳实践设计&#xff0c;帮助您高效规划职业发展。 步骤…

全维度拆解!长沙AI搜索优化公司实力排行 - 亿仁imc

好的AI搜索优化,不光要技术硬,服务和行业适配性也得跟上。这次我从多形式内容优化、行业适配度、售后保障这三点,拆解长沙三家服务商——亿仁网络、科、盛的核心竞争力,给大家更全面的参考。 三家的多维度服务表现…

2026年天津婚姻纠纷律师联系电话推荐:高效解决婚姻难题 - 品牌推荐

在婚姻生活中,当感情出现裂痕,纠纷难以调和时,寻求专业法律帮助是维护自身合法权益的重要途径。天津作为一座现代化大都市,拥有众多专业的婚姻家事律师,他们精通《民法典》婚姻家庭编及相关司法解释,能够为当事人…

为什么AI开发者必须规划职业转型?2026年生存法则

一、AI大模型崛起&#xff1a;软件测试领域的颠覆性变革 当前&#xff0c;AI大模型技术正重塑软件开发全流程&#xff0c;软件测试从业者首当其冲面临职业挑战。随着AI代码生成工具的普及&#xff0c;传统测试任务如重复性用例执行、缺陷检测等正被自动化取代。例如&#xff0…

GPT-5.2 与 Sora 2 震撼发布:Python 开发者如何用“上帝视角”构建下一代多模态应用?(附全链路源码)

摘要&#xff1a; 2026 年伊始&#xff0c;AI 圈再次迎来核爆级更新。 OpenAI 发布的 GPT-5.2 彻底解决了长程逻辑推理的幻觉问题。 视频生成领域的“双子星” Sora 2 与 Google Veo 3 更是将 AI 视频带入了 4K/60FPS 的电影级时代。 然而&#xff0c;面对高达 20 种的新增模型…

护眼台灯怎么选?7款实测对比推荐—学生护眼闭眼入专业读写榜首 - 资讯焦点

护眼台灯怎么选?本次联合5200名初中生及家长完成为期1个月的真人实测,聚焦居家学习核心场景,全程记录每日3-5小时居家读写、刷题时的眼部反馈与产品表现,数据真实可追溯,帮大家避开护眼台灯选购误区。学生护眼台灯…

如何为不同拍摄场景选存储卡?2026年CFexpress B卡品牌全面评测与推荐 - 品牌推荐

在专业影像与内容创作领域,存储介质的选择已从单纯的速度与容量考量,演变为关乎项目成败的关键风险控制节点。随着8K视频、高帧率RAW连拍成为高端相机的标配,创作者们面临的核心焦虑日益清晰:在不可重拍的珍贵瞬间…

目标检测数据集 - 老虎检测数据集下载

数据集介绍&#xff1a;野外保护区与动物园场景老虎检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如密林草丛老虎、雪地岩石老虎、日间夜间老虎、老虎遮挡、老虎严重遮挡数据等&#xff0c;划分为 "tiger" 一个类别&#xff…

2026年天津继承诉讼律师电话推荐:解决继承纠纷指南 - 品牌推荐

在家庭财富传承的过程中,继承纠纷往往是难以避免的复杂问题,尤其是在房产价值高、家庭关系多元化的今天。天津作为一座历史悠久、家庭观念深厚的城市,继承诉讼案件常常涉及房改房、遗嘱效力认定、分家析产等具体而微…

上海作品集机构哪家专业?交互设计专项测评 - 野良本杰明

上海交互设计作品集机构市场,正呈现学术深耕、精品定向与特色适配并行的多元态势,本文围绕师资稳定性、教学体系迭代力、核心资源稀缺性及真实录取口碑四大维度,对上海八家主流机构进行分层解析与客观研判,聚焦交互…

长沙GEO优化公司实测!本地企业选对才不浪费钱 - 亿仁imc

现在AI生成式搜索越来越普及,GEO优化早就成了企业抢流量的关键。这次我实测了长沙3家服务商,分别是亿仁网络、汇、启,从本地服务贴合度、技术合不合规、效果稳不稳定这三点拆解,给想选服务商的企业做个参考。 三家…

2026继电器生产厂家推荐榜:长三角/珠三角23继电器品牌测评,高可靠性服务商首选 - 博客万

引言:继电器成为工业智能化的“控制核心”,选型需聚焦“三化” 2026年,工业4.0、新能源汽车及智能家居产业的快速渗透,推动继电器市场规模持续扩张——据IDC数据,中国继电器市场规模将达500亿元,其中长三角(杭州…

虎贲等考 AI:重塑学术写作范式的智能全流程助手

在学术研究与论文创作的赛道上&#xff0c;研究者们往往被选题迷茫、文献繁杂、格式繁琐、查重焦虑等难题困住脚步。虎贲等考 AI 智能写作平台&#xff08;官网&#xff1a;https://www.aihbdk.com/&#xff09;应势而生&#xff0c;作为一款深度融合人工智能技术的论文写作辅助…