理解委托(delegate)及为什么要使用委托
委托:是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。
上述为官方说法,理解起来比较难,举个生活中的例子:
某人有三子,让他们各自带一样东西出门,并带回一头猎物。
上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->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)及为什么要使用委托相关推荐
- 跟小静学CLR via C#(12)-委托Delegate
本来按照进度应该学习事件了,可总觉得应该委托在前,事件在后,才好理解. 委托是一个类,它提供了回调函数机制,而且是类型安全的.使用委托可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数 ...
- C# 委托(Delegate) 事件(Event)应用详解
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...
- Unity 项目中委托Delegate用法案例
Unity中Delegate的用法场景 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- C#委托(delegate、Action、Func、predicate)和事件
C#委托(delegate.Action.Func.predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C++函数指针与C#委托之间有何联系 - 51CTO.C ...
- jquery-事件委托-delegate
代理的使用 如果希望某个成员绑定某个事件,例如li标签编定click事件 期望新进来的li也能得到这个事件 可以通过事件委托来实现 事件委托的格式 父级标签对象.delegate(str子级标签选择器 ...
- C#-----委托delegate的定义与使用
委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法 委托的声明: delegate <函数返回类型> <委托名> (<函数参数>) //声明委托 del ...
- C# 委托 (delegate)
委托是类 委托是类,C# 提供了 delegate 关键字,使得用户能简单的声明委托.编译器及 CLR 做了大量的工作来隐藏委托的复杂性.[1] internal delegate void Feed ...
- C#基础知识学习之 ✨ “精神小伙“——委托(delegate) 的含义和用法
C#委托(Delegate) 在C#的学习过程中,自然有我们的精神小伙--委托 的一席之地 本文就介绍一下C#中的委托,这位可以包含同类方法函数的小伙子 C# 中的委托(Delegate)类似于 C ...
- java委托事件与观察者模式_多播委托与观察者模式联合使用,以及委托与事件的区别...
首先我们先看一下多播委托: 使用委托时,首先我们声明委托,委托语法一共有四种类型,分别时有参,无参,以及有无参数返回值. 1 public class DelegateShow //: System. ...
最新文章
- Neverout:一款新的沉浸式益智游戏
- POJ 3436 -- ACM Computer Factory(最大流,建图)
- Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较
- 何为真正的 FaaS ?阿里舜天平台做了四大创新
- long 雪花算法_雪花算法(SnowFlake)Java版
- 查询好友IP地址的几种方法
- java档案管理系统_基于JAVA的简单档案管理系统
- excel模板 基金账本_有哪些好用的Excel个人账单模板?
- 云数据中心容灾备份方案
- 如何设置二级域名解析(新手小白必看)
- 编程实践精华总结集锦系列1: SpringBoot/Maven/IDEA/Java/Kotlin/Redis等等
- 做视频后期剪辑用什么软件好?4款常用软件推荐
- macOS Monterey 12.1 (21C52) 正式版 ISO、IPSW、PKG 下载
- 神经网络的心得体会,神经网络心得体会
- 面料ERP_面料企业ERP管理系统_面料软件
- uClinux 启动过程详细分析
- securecrt 不掉线_如何不掉线
- 我在华为写了13年的代码
- uni-app入门教程(7)第三方登录和分享
- 图像分类经典卷积神经网络—ResNet论文翻译(纯中文版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)