当前位置: 首页 > 编程日记 > 正文

理解委托(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

相关文章:

echarts X轴 或者 Y轴 添加标识线

1、X轴添加标示线效果图 代码 option {xAxis: {data : [aaa,bbb]},yAxis: {},series: [{symbolSize: 20,data: [[aaa, 8.04],[bbb, 9.04],],type: line,markLine: {symbol: [none, none],//去掉箭头itemStyle: {normal: { lineStyle: {type: solid,color:{//设置渐变type: li…

OSPF配置实验

拓扑中设备&#xff1a;R1,R2,R3,SW F0/1 R1 F0/0,F0/2 R2 f0/0,F0/3 R3 F0/0R1配置基本配置IP环回OSPFR1(config)#int loop 0R1(config-if)#ip add 1.1.1.1 255.255.255.255R1(config)#router ospf 100//R1(config-router)#router-id 1.1.1.1R1(config-router)#net 192.…

CreateRemoteThread

CreateRemoteThread是一个Windows API函数&#xff0c;它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).。转载于:https://www.cnblogs.com/hshy/p/10903581.html

sql序列(2) sql语句功能表

这里提供一份 sql语句功能表&#xff0c;大家可以根据关键字去梳理自己的知识点 https://files.cnblogs.com/files/namedL/sql%E8%AF%AD%E5%8F%A5%E5%8A%9F%E8%83%BD%E8%A1%A8.rar转载于:https://www.cnblogs.com/namedL/p/8204641.html

Newtonsoft.Json.dll 本地调用正常,服务器调用不正常

Newtonsoft.Json.dll 本地调用正常&#xff0c;服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可转载于:https://www.cnblogs.com/skylaugh/archive/2011/02/14/1954125.html

CSS实现超过一定的宽度添加省略

CSS实现超过一定的宽度添加省略 .detail-item-line {width: 100%;word-break: keep-all; /* 不换行 */white-space: nowrap; /* 不换行 */overflow: hidden; /* 内容超出宽度时隐藏超出部分的内容 */text-overflow: ellipsis; }

[分享]五种提高 SQL 性能的方法

标签&#xff1a;sql 优化 server    [推送到技术圈] 有时&#xff0c; 为了让应用程序运行得更快&#xff0c;所做的全部工作就是在这里或那里做一些很小调整。啊&#xff0c;但关键在于确定如何进行调整&#xff01;迟早您会遇到这种情况&#xff1a;应用程序中的 SQL 查询…

Win7/Win2008下IIS配置Asp站点启用父路径的设置方法

iis日志错误如下&#xff1a; 修改路径文件权限问题依旧。 解决方式&#xff1a; 转载于:https://www.cnblogs.com/xzlive/p/10904125.html

软件与Cache

Cache是提高CPU性能的一种技术手段&#xff0c;通过Cache存储器把程序频繁用到的指令和数据存储起来&#xff0c;等再次访问该指令或数据时CPU可以直接从Cache中读取而不用访问主存从而能提高程序运行的效率。 Cache背后的理论基础是程序运行的“局部性”原理&#xff0c; “…

Fiddler监控面板显示Server栏(Fiddler v5.0)

1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.去掉 UI.lvSessions.AddBoundColumn("Server", 50, "response.server"); 前的注释符号并保存脚本&#xff0c;监控面板即显示Server栏 转载于:https://www.cnblogs.com/kakaln/p/8207073.…

echarts datazoom 显示的位置设置

设置grid属性里的bottom var eleCurves document.getElementById(eleCourtsBeforeCurves);var eleCurvesChart echarts.init(eleCurves);var eleCurvesOption {title: {text: },tooltip: {trigger: axis},legend: {data: [线损率]},grid: {left: 3%,right: 4%,bottom: 15%,…

php file函数在内容与底层逻辑分离的应用

最近在学习dedecms的源代码&#xff0c;看到了一个file函数的应用。在权限管理页面&#xff0c;权限页面内容全部由txt文件记录&#xff0c;用file函数读取txt内容&#xff0c;再将内容转换成html表现形式。是个不错的内容与逻辑层分离的解决方案。file()-- 把整个文件读入一个…

最大最小值滤波

最大最小值滤波 最大最小值滤波是一种比较保守的图像处理手段&#xff0c;与中值滤波类似&#xff0c;首先要排序周围像素和中心像素值&#xff0c;然后将中心像素值与最小和最大像素值比较&#xff0c;如果比最小值小&#xff0c;则替换中心像素为最小值&#xff0c;如果中心像…

Java获取Mybatis动态生成的sql

前提&#xff1a;已经编写好相应的接口个xml文件 public void exportExcel_bw() throws Exception {//封装sql需要查询的sql的条件Map<String, Object> paramMap new HashMap();paramMap.put("parentName", "权限管理");paramMap.put("pageBe…

哲学是什么?(选自:苏菲的世界)

亲爱的苏菲&#xff1a; 人的嗜好各有不同。有些人搜集古钱或外国邮票&#xff0c;有些人喜欢刺绣&#xff0c;有些人则利用大部分的时间从事某种活动。 另外许多人以阅读为乐&#xff0c;但阅读的品味人各不同。有些人只看报纸或漫画&#xff0c;有些人喜欢看小说&#xff0c;…

SQL语句统计错误率

2018年的第一篇博客就以此作为开端吧 :D 最近在项目中碰到需要统计类似错误率之类的需求&#xff0c;原本这功能是之前做的&#xff0c;但是最近测的时候发现出了点问题&#xff0c;显示的结果不对。这就比较尴尬了。。。 于是就进行debug&#xff0c;发现之前写的查询SQL有问…

Microsoft Surface Toolkit Beta 版发布

目前微软发布的这款Microsoft Surface Toolkit 仍是Beta 版。其中包括一些列控件&#xff08;Control&#xff09;、API、模板&#xff08;Template&#xff09;以及程序样例和文档供开发者使用。只要具备.NET Framework 4.0、WPF 4.0 和带有Windows Touch 功能并安装Windows 7…

第四节 RabbitMQ在C#端的应用-客户端连接

第四节 RabbitMQ在C#端的应用-客户端连接 原文:第四节 RabbitMQ在C#端的应用-客户端连接版权声明&#xff1a;未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/87357911 1.在VS2013中新建控制台程序&#xff0c;然后添加引用&#xff1a;.NET…

Android控件之ImageView探究

ImageView控件是一个图片控件&#xff0c;负责显示图片。 以下模拟手机图片查看器 目录结构 main.xml布局文件 <?xml version"1.0"encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"androi…

R. ftp软件

转载于:https://www.cnblogs.com/youyuanjuyou/p/8257976.html

Js打印表格时部分边框不显示(table 标签)

问题如下&#xff1a; 原始表单 &#xff0c;需要打印在浏览器上打印该表单 出以下效果 原因&#xff1a;是因为当表被复制到一个新窗口时&#xff0c;您的CSS不被保留。你可以通过将一些相关的CSS传递到document.write&#xff08;&#xff09;方法中的新窗口来解决这个问题。…

35岁以前成功的12条黄金法则(1)

第一章&#xff1a;一个目标 一艘没有航行目标的船&#xff0c;任何方向的风都是逆风。 1、你为什么是穷人&#xff0c;第一点就是你没有立下成为富人的目标。 2、你的人生核心目标是什么&#xff1f;杰出人士与平庸之辈的根本差别并不是天赋、机遇&#xff0c;而在于有无目标。…

idea配置echache.xml报错Cannot resolve file 'ehcache.xsd'

解决方法: 打开settings->languages&frameworks->schemas and dtds ,添加地址 http://ehcache.org/ehcache.xsd 然后将ehcache.xml 这里做修改 转载于:https://www.cnblogs.com/liaojie970/p/8270570.html

linux环境安装python-pip

参考&#xff1a;https://blog.csdn.net/u013372487/article/details/51726002 1、通过wget方式安装 # wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate #不检查证书&#xff0c;尽量避免使用(某些情况下加入no-check-certificate 即可成功安装) # python…

NLP学习 资料总结

NLP目前应用于7个重要领域&#xff1a; 1.句法语义分析&#xff1a;对于给定的句子&#xff0c;进行分词、词性标记、命名实体识别和链接、句法分析、语义角色识别和多义词消歧。 2.信息抽取&#xff1a;从给定文本中抽取重要信息。通俗来说就是&#xff0c;了解谁在什么时候、…

一生受益的三个小故事

转载于:https://www.cnblogs.com/88223100/archive/2011/02/22/three_stories.html

VS2008中Web Reference和Service Reference的区别

很早就发现在vs2008中应用web service有两种方式&#xff0c;即Add Web Reference和Add Service Reference&#xff0c;但是一直不是很清楚这两者有什么区别。趁着今天有空实验一下这两者的区别并记录下来供大家参考。 首先在网上查找&#xff0c;发现有如下两个主要区别&#…

详细记录python的range()函数用法

详细记录python的range()函数用法 使用python的人都知道range()函数很方便&#xff0c;今天再用到他的时候发现了很多以前看到过但是忘记的细节。这里记录一下range(),复习下list的slide&#xff0c;最后分析一个好玩儿的冒泡程序。 这里记录一下&#xff1a; >>> ran…

socket编程和并发服务器

socket这个词可以表示很多概念&#xff1a; 在TCP/IP协议中&#xff0c;“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程&#xff0c;“IP地址端口号”就称为socket。 在TCP协议中&#xff0c;建立连接的两个进程各自有一个socket来标识&#xff0c;那么这两个socket组成…

基于协同过滤算法实现选课推荐系统

新版本教务管理系统 教务管理系统 选课功能1.系统功能 1、用户账户管理 2、学生个人信息的查看与修改 3、学生的网上选课与课程的评分 4、教师个人信息的查看与修改 5、教师对学生课程评价结果的查看 6、管理员对学生信息与教师信息的查看与添加 7、管理员对课程的增删改查 8、…