当前位置: 首页 > 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.jsqmd.com/news/70344/

相关文章:

  • 2025年热门的新能源驻车加热通风管设备/汽车驻车加热通风管设备厂家实力及用户口碑排行榜 - 行业平台推荐
  • 2025年12月西安舞台音响,陕西宴会厅音响,线阵音响厂家推荐:音质实测+场景适配全攻略​ - 品牌鉴赏师
  • 2025年评价高的金属波纹管设备厂家最新推荐排行榜 - 品牌宣传支持者
  • 2025年比较好的串联电伴热带/MI电伴热带厂家最新TOP排行榜 - 行业平台推荐
  • 2025年质量好的硅橡胶发热电缆/融雪发热电缆厂家最新用户好评榜 - 品牌宣传支持者
  • 2025年市面上有实力的产品认证办理价格,3C认证/CE认证/ROHS认证/REACH认证/产品认证公司选哪家 - 品牌推荐师
  • 2025年华北地区五大充电桩品牌厂家排行榜,新测评精选交流充 - myqiye
  • 2025年热门的天冬聚脲厂家最新热销排行 - 品牌宣传支持者
  • 2025年上海外国人工作许可正规厂家排行榜,品牌服务商与制造 - mypinpai
  • 2025长沙高中私立学校排名TOP5权威推荐:甄选优质教育资 - 工业推荐榜
  • 2025年知名的古钱币拍卖/钱币权威排行榜 - 行业平台推荐
  • 2025年矿用电缆生产厂TOP5权威推荐:矿用阻燃电缆加工厂 - 工业品牌热点
  • 2025年矿用阻燃电缆制造厂实力排名推荐,矿用橡套电缆供应企 - 工业品牌热点
  • 2025年评价高的成都集装箱租赁厂家推荐及选购指南 - 行业平台推荐
  • 2025勒振式传感器TOP5权威推荐:技术参数深度测评,助企 - mypinpai
  • 2025年12月具备资质的软件验收测试,卓越的软件验收测试,评价高的软件验收测试公司权威推荐,全流程测试服务实测解析!​ - 品牌鉴赏师
  • 数据采集技术 - 第四次作业
  • 2025年比较好的粉末冶金厂家最新TOP实力排行 - 品牌宣传支持者
  • 2025Profinet转ModbusRTU推荐厂家TOP5 - myqiye
  • 产教协同的时尚设计院校哪个靠谱?哪家口碑好? - 工业推荐榜
  • 留学跨校区体验机构排行榜,口碑好的留学跨校区体验机构精选推荐 - 工业品牌热点
  • 2025年热门的工程液压油缸/柱塞式液压油缸厂家最新用户好评榜 - 行业平台推荐
  • 2025年中国充电桩个性化定制品牌供应商排名:五大充电桩源头 - mypinpai
  • 2025年带钢品牌深度评测:打包铁条选购全解析,带钢怎么选择解决方案与实力解析 - 品牌推荐师
  • 星球助手v1.8.0发布
  • 2025年靠谱的ALD设备/ALD工艺开发工艺表现榜 - 品牌宣传支持者
  • 2025年质量好的机器人编程加盟附近机构推荐 - 行业平台推荐
  • 2025年中国Profinet转ModbusRTU定制化服务 - myqiye
  • 2025年上海五大婚恋机构推荐,诚信的婚恋机构有哪些? - myqiye
  • 2025年上海五大婚恋机构推荐,诚信的婚恋机构有哪些? - myqiye