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

上述为官方说法,理解起来比较难,举个生活中的例子:

某人有三子,让他们各自带一样东西出门,并带回一头猎物。
上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->delegate 猎物(返回值) 带回猎物(委托名)(工具(参数类型) x)-->delegate int GetValue(int i)
三个人执行委托的方法各不相同
兔子 打猎(工具 弓)-public static int GetValue1(int i){ return i; }
野鸡 买(工具 钱)-public static int GetValue2(int i){ return i*2; }
狼 诱捕(工具 陷阱)-public static int GetValue3(int i){ return i*i; }

如何调用委托

用new关键字(将方法名作为参数)生成一个委托对象,建立委托与方法的关联。

GetValue obj = new GetVlaue(Class.GetValue1);

obj(3); --> result: 3

GetValue obj = new GetVlaue(Class.GetValue2);

obj(3); --> result: 6

GetValue obj = new GetVlaue(Class.GetValue3)

obj(3); --> result: 9

通过委托调用不同的方法,将需要执行的方法作为委托的参数

我们还可以实现多路广播委托,什么是多路广播委托,看例子:

GetValue obj = new GetVlaue(Class.GetValue1);

obj += new GetVlaue(Class.GetValue2);

obj += new GetVlaue(Class.GetValue3);

obj(3);

多路广播委托即:一处调用委托,所有关联方法都会被调用。

委托的好处

1.相当于用方法作为另一方法参数(类似于C的函数指针)
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托
3.当不知道方法具体实现什么时使用委托,如:事件中使用委托

附:.net framework中对委托进行了封装,直接使用Func<>来代替delegate,Func<>最多有四个参数的重载。 

转载于:https://www.cnblogs.com/zengen/archive/2011/02/06/1949518.html

理解委托(delegate)及为什么要使用委托相关推荐

  1. 跟小静学CLR via C#(12)-委托Delegate

    本来按照进度应该学习事件了,可总觉得应该委托在前,事件在后,才好理解. 委托是一个类,它提供了回调函数机制,而且是类型安全的.使用委托可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数 ...

  2. C# 委托(Delegate) 事件(Event)应用详解

    委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...

  3. Unity 项目中委托Delegate用法案例

    Unity中Delegate的用法场景 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...

  4. C#委托(delegate、Action、Func、predicate)和事件

    C#委托(delegate.Action.Func.predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C++函数指针与C#委托之间有何联系 - 51CTO.C ...

  5. jquery-事件委托-delegate

    代理的使用 如果希望某个成员绑定某个事件,例如li标签编定click事件 期望新进来的li也能得到这个事件 可以通过事件委托来实现 事件委托的格式 父级标签对象.delegate(str子级标签选择器 ...

  6. C#-----委托delegate的定义与使用

    委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法 委托的声明: delegate <函数返回类型> <委托名> (<函数参数>) //声明委托 del ...

  7. C# 委托 (delegate)

    委托是类 委托是类,C# 提供了 delegate 关键字,使得用户能简单的声明委托.编译器及 CLR 做了大量的工作来隐藏委托的复杂性.[1] internal delegate void Feed ...

  8. C#基础知识学习之 ✨ “精神小伙“——委托(delegate) 的含义和用法

    C#委托(Delegate) 在C#的学习过程中,自然有我们的精神小伙--委托 的一席之地 本文就介绍一下C#中的委托,这位可以包含同类方法函数的小伙子 C# 中的委托(Delegate)类似于 C ...

  9. java委托事件与观察者模式_多播委托与观察者模式联合使用,以及委托与事件的区别...

    首先我们先看一下多播委托: 使用委托时,首先我们声明委托,委托语法一共有四种类型,分别时有参,无参,以及有无参数返回值. 1 public class DelegateShow //: System. ...

最新文章

  1. Neverout:一款新的沉浸式益智游戏
  2. POJ 3436 -- ACM Computer Factory(最大流,建图)
  3. Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较
  4. 何为真正的 FaaS ?阿里舜天平台做了四大创新
  5. long 雪花算法_雪花算法(SnowFlake)Java版
  6. 查询好友IP地址的几种方法
  7. java档案管理系统_基于JAVA的简单档案管理系统
  8. excel模板 基金账本_有哪些好用的Excel个人账单模板?
  9. 云数据中心容灾备份方案
  10. 如何设置二级域名解析(新手小白必看)
  11. 编程实践精华总结集锦系列1: SpringBoot/Maven/IDEA/Java/Kotlin/Redis等等
  12. 做视频后期剪辑用什么软件好?4款常用软件推荐
  13. macOS Monterey 12.1 (21C52) 正式版 ISO、IPSW、PKG 下载
  14. 神经网络的心得体会,神经网络心得体会
  15. 面料ERP_面料企业ERP管理系统_面料软件
  16. uClinux 启动过程详细分析
  17. securecrt 不掉线_如何不掉线
  18. 我在华为写了13年的代码
  19. uni-app入门教程(7)第三方登录和分享
  20. 图像分类经典卷积神经网络—ResNet论文翻译(纯中文版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)

热门文章

  1. 2022-2028年中国AKD施胶剂行业市场研究及前瞻分析报告
  2. Docker 入门系列(3)- Docker 容器(创建、启动、终止、进入、删除、导入、导出容器、容器和镜像转化)
  3. Docker安装Nextcloud
  4. 工作如果没有方法,光靠苦力是不行的
  5. 熵,交叉熵,散度理解较为清晰
  6. 奇异值分解与最小二乘问题 线性回归
  7. Lambda 表达式基础理论与示例
  8. TVM如何训练TinyML
  9. TensorFlow用法
  10. MindSpore 高阶优化器