恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

泛型委托的使用

  • 首页
  • 资讯中心
  • /
  • 泛型委托的使用

相关资讯

你的车离“自动驾驶“只差一个开源系统:openpilot 装车到跑通的全过程记录 2026/8/16 15:34:42
一文搞懂SCOOP核心概念:Future、Broker与Worker深度解析 2026/8/16 15:34:42
AXPhotoViewer 性能优化:预取机制与内存管理如何支撑千图流畅浏览 2026/8/16 15:34:42

最新资讯

Trash-ICRA19 海洋垃圾检测数据集介绍、下载及YOLO/VOC/COCO训练格式转换
AI时代必备技能指南:掌握这5类能力,职场竞争力提升60%
洛雪音乐音源配置完整指南:5分钟导入免费无损音源的避坑路线图
用了 3 天差点封号:OpenKore 自动化工具安全使用全复盘
网页媒体资源捕获神器:猫抓浏览器扩展安装与使用完整指南
管家婆售后揭秘:年采购500万的“大客户”,可能是公司最大的利润黑洞

今日推荐

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

泛型委托的使用

发布时间:2026/8/16 15:39:43
泛型委托的使用 1. 什么是委托Delegate定义委托是一种类型安全的函数指针用于封装一个或多个具有相同签名的方法。本质编译器生成的密封类继承自System.MulticastDelegate。作用解耦调用方与实现方。支持回调、事件、LINQ、异步编程等场景。2. 委托的声明与实例化2.1 自定义委托类型​csharp// 声明一个委托类型public delegate int BinaryOp(int x, int y);// 实例化BinaryOp add (a, b) a b;int result add(3, 4); // 7### 2.2 使用内置泛型委托 | 委托类型 | 签名示例 | 说明 | | ----------- | ------------------- | -------------------------------- | | Action | Actionstring | 无返回值 | | Func | Funcint,int,int | 有返回值最后一个类型为返回类型 | | Predicate | Predicateint | 返回 bool | csharp Funcint,int,int multiply (x, y) x * y; Predicatestring isEmpty s string.IsNullOrEmpty(s);3. 多播委托Multicast Delegate特点一个委托实例可绑定多个方法调用时按添加顺序执行。返回值仅保留最后一个方法的返回值。Actionlog()Console.Write(A);log()Console.Write(B);log()Console.Write(C);log();// 输出 ABC3.1 移除方法log-()Console.Write(B);// 必须使用相同实例4. 匿名方法与 Lambda 表达式// 匿名方法C# 2.0ActionoldStyledelegate(stringmsg){Console.WriteLine(msg);};// Lambda 表达式C# 3.0ActionstringnewStylemsgConsole.WriteLine(msg);5. 委托与事件Event事件是对委托的封装防止外部直接触发。publicclassButton{publiceventEventHandler?Clicked;// 声明事件publicvoidSimulateClick(){Clicked?.Invoke(this,EventArgs.Empty);// 安全触发}}// 订阅事件varbtnnewButton();btn.Clicked(s,e)Console.Write(Button clicked!);btn.SimulateClick();6. 协变与逆变C# 4.0// 协变返回类型可更具体delegateAnimalGetAnimal();GetAnimalgetDog()newDog();// Dog 继承 Animal// 逆变参数类型可更抽象delegatevoidSetDog(Dogd);SetDogsetAnimal(Animala){};// 接受 Animal7. 委托与异步编程7.1 BeginInvoke / EndInvoke已过时Funcint,int,intadd(a,b)ab;add.BeginInvoke(3,4,ar{intresultadd.EndInvoke(ar);Console.WriteLine(result);},null);7.2 使用 Task推荐Funcint,int,intadd(a,b)ab;Task.Run(()add(3,4)).ContinueWith(tConsole.WriteLine(t.Result));8. 高级技巧8.1 委托链异常处理Actionrisky()thrownewException(Oops!);risky()Console.WriteLine(Safe);foreach(Actiondinrisky.GetInvocationList()){try{d();}catch{/* 记录日志 */}}8.2 表达式树与委托转换ExpressionFuncint,int,intexpr(x,y)xy;Funcint,int,intcompiledexpr.Compile();// 转换为委托9. 性能与最佳实践场景建议说明优先使用Action/Func避免自定义委托类型冗余避免闭包陷阱Lambda 捕获循环变量需复制到局部变量事件命名规范使用OnXxx触发Xxx作为事件名10. 完整示例计算器publicclassCalculator{publicdelegatedoubleOperation(doublea,doubleb);publicstaticdoubleExecute(doublea,doubleb,Operationop)op(a,b);publicstaticvoidRun(){varadd:Operation(x,y)xy;varpower:OperationMath.Pow;Console.WriteLine(Execute(2,3,add));// 5Console.WriteLine(Execute(2,3,power));// 8}}

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号