当前位置: 首页 > news >正文

C#委托

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;}
}

http://www.rkmt.cn/news/80901.html

相关文章:

  • 2025年热门的新能源驻车加热通风管设备/汽车驻车加热通风管设备厂家实力及用户口碑排行榜 - 行业平台推荐
  • 2025年12月西安舞台音响,陕西宴会厅音响,线阵音响厂家推荐:音质实测+场景适配全攻略​ - 品牌鉴赏师
  • 2025年评价高的金属波纹管设备厂家最新推荐排行榜 - 品牌宣传支持者
  • 2025年比较好的串联电伴热带/MI电伴热带厂家最新TOP排行榜 - 行业平台推荐
  • 2025年质量好的硅橡胶发热电缆/融雪发热电缆厂家最新用户好评榜 - 品牌宣传支持者
  • 2025年上海外国人工作许可正规厂家排行榜,品牌服务商与制造 - mypinpai
  • 2025年知名的古钱币拍卖/钱币权威排行榜 - 行业平台推荐
  • 2025年矿用电缆生产厂TOP5权威推荐:矿用阻燃电缆加工厂 - 工业品牌热点
  • 2025年12月具备资质的软件验收测试,卓越的软件验收测试,评价高的软件验收测试公司权威推荐,全流程测试服务实测解析!​ - 品牌鉴赏师
  • 2025年中国充电桩个性化定制品牌供应商排名:五大充电桩源头 - mypinpai
  • 2025年热门的工程液压油缸/柱塞式液压油缸厂家最新用户好评榜 - 行业平台推荐
  • 2025年靠谱的ALD设备/ALD工艺开发工艺表现榜 - 品牌宣传支持者
  • 2025年质量好的机器人编程加盟附近机构推荐 - 行业平台推荐
  • 2025年中国五大奢侈品学校推荐:认可度好的奢侈品学校有哪些 - 工业品牌热点
  • 2025年质量好的太阳能路灯系统厂家推荐及选择参考 - 行业平台推荐
  • 2025年电子连接器生产厂哪家值得选?专业连接器厂商排名与解 - myqiye
  • 2025世界被认可的时尚学校TOP5权威推荐:新深度测评指南 - 工业品牌热点
  • 2025年现代碳钢床TOP5厂家权威推荐:甄选实力企业守护安 - myqiye
  • 2025年上海口碑好的婚介公司排行榜,新测评精选婚介所服务推 - 工业品牌热点
  • 2025年全球知名的时尚学校哪家专业?哪家信誉好?求推荐 - mypinpai
  • 2025年石棉橡胶板厂家联系电话推荐:精选优质供应商指南 - 品牌推荐
  • 25届香港留学生必知十大留学中介机构排名名单 - 留学品牌推荐官
  • 北京香港留学中介十大排名人气热度排名2025 - 留学品牌推荐官
  • 2025年石棉橡胶板厂家联系电话推荐:专业供应商推荐指南 - 品牌推荐
  • 2025年口碑好的反弹同步托底轨TOP品牌厂家排行榜 - 行业平台推荐
  • 西安宝鸡认可率高的香港留学中介十大榜单一览 - 留学品牌推荐官
  • 机器学习预测41%项目延迟的技术实践
  • 武汉GEO优化公司发展现状与优质服务商解析 - 品牌评测官
  • 揭晓深圳三大申请香港研究生留学中介机构名单一览 - 留学品牌推荐官
  • Alientech KESS V3 Slave Car Bench-Boot: Activate LCV Protocols for Mechanics Car Owners