尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C#委托

C#委托
📅 发布时间:2026/6/22 3:52:16

1. 委托是什么?

  • 委托(Delegate) 是一种类型,专门用来存储、传递方法。
  • 本质上,委托是 方法的容器,可以把方法当作变量一样传递和调用。
  • 只要 返回值和参数类型 与委托匹配,就可以存入委托。

委托常用于回调、事件系统、解耦模块逻辑、延迟执行等场景。


2. 使用 delegate 委托的声明(不推荐)

委托的声明语法类似方法声明,只是前面加上 delegate 关键字:

delegate void MyFun();        // 无参无返回值委托声明
delegate int MyFun2(int a);   // 有参有返回值委托声明
delegate T MyFun3<T, K>(T v, K k);    //泛型委托声明 
  • 委托可以声明在 命名空间 或 类内部。
  • 同一作用域中,委托 不能重名,也不支持重载。
  • 委托的本质是类,可以通过实例化调用方法。

3. C#封装好 delegate 的委托(推荐)

Action<T1,...,Tn> action;       // 接收 T1~Tn 参数,无返回
Func<T1,...Tn,TResult> func;  // 接收 T1~Tn 参数,返回 TResult型值

当想要声明无返回的委托,使用Action。当想要声明有返回的委托,使用Func。


4. 委托的常用

4.1 委托常作为类的成员

class Custom
{public Action<int> action;public Func<int,int> func;public void Run(){action?.Invoke(10);  //当 action 不为null时 也可以使用 action() 执行 推荐使用 ?.Invokeint result = func?.Invoke(10);  // result 结果会等于返回的 num}
}
class Test
{int value;int num = 5;public void TestMethod(){Custom custom = new Custom();custom.action=(a)=>{value = a;};custom.func=(a)=>{value = a;return num;};// 调用 Run 来触发委托custom.Run();}
}

4.2. 委托常作为函数参数

class Custom
{int value = 1;// 有参无返回方法public void CustomMethod1(int a){value *= a;Console.WriteLine("CustomMethod1 value=" + value);}//有参有返回方法public int CustomMethod2(int a){value *= a;Console.WriteLine("CustomMethod2 value=" + value);return value;}public void Run(){Test test = new Test();// 方法一 传入 已有的方法test.TestAction(CustomMethod1);test.TestFunc(CustomMethod2);// 方法二 传入 Lambda 表达式(推荐)test.TestAction(a => { value += a; });test.TestFunc(a => { value += a; return value; });}
}
class Test
{//传入有参无返回委托public void TestAction(Action<int> callback){int num = 10;callback(num); // 调用回调}//传入有参有返回委托public void TestFunc(Func<int,int> callback){int num = 10;int result = callback(num); // 调用回调Console.WriteLine("TestFunc result=" + result);}
}

优点:逻辑处理完成后再执行方法,实现解耦和延迟调用。


5. 多播委托(Multicast Delegate)

public class Test()
{public void Method1(){}public void Method2(){}public void Method3(){}public int Method11(){}public int Method22(){}public int Method33(){}Action action;Func<int> func;//添加委托public void AddAction(){action += Method1;action += Method2;action += Method3;// 按顺序执行添加的方法action?.Invoke();func += Method11;func += Method22;func += Method22;// 按顺序执行添加的方法 但是只保留最后一个方法的返回值int result = func?.Invoke();}//移除委托(多次移除同一方法不会报错)public void RemoveAction(){action -= Method1;action -= Method2;action -= Method3;func -= Method11;func -= Method22;func -= Method33;}
}

相关新闻

  • 2025年热门的新能源驻车加热通风管设备/汽车驻车加热通风管设备厂家实力及用户口碑排行榜 - 行业平台推荐
  • 2025年12月西安舞台音响,陕西宴会厅音响,线阵音响厂家推荐:音质实测+场景适配全攻略​ - 品牌鉴赏师
  • 2025年评价高的金属波纹管设备厂家最新推荐排行榜 - 品牌宣传支持者

最新新闻

  • 数字电路模拟程序总结性博客
  • 2026年中国软文发稿平台TOP8综合测评报告:权威排名与选购指南 - GEORANK
  • 智能语音交互的声学革新:从降噪到体验的全方位突破
  • 软件工程中的关怀伦理:从抽象关注到具体关怀的实践指南
  • Elasticsearch持久化 Agent 记忆系统(一个开源工具)
  • 2026达州防水补漏避坑指南:卫生间/厨房/阳台/屋顶/地下室漏水检测维修全攻略,正规施工+透明报价+口碑榜靠谱服务商推荐 - 安佳防水

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号