从对象的角度理解委托以及委托链的返回值获取

C#语法小知识(十三)带返回值的委托 委托的相关基础知识请参考C#语法小知识(四)委托delegate,这里讨论一下带返回值的委托如何处理。 阅读详情

 

1.   委托
所有的委托都是从MulticastDelegate继承的。
MulticastDelegate并没有自己的方法,全部是重载Delegate的方法。
问题:
1.委托(delegate)关键字是一个对象,还是一个类?
答案:委托是一个类
2.delegate所声明的变量是一个对象,还是一个类?
答案:其实是一个类,在编译时把它翻译成一个Delegate的继承类。
3.委托的实质:
委托是一个函数集合的类,这个集合可以有多个函数,也可以只有一个函数。
这个类说明了这个集合里面的方法,因为一个方法必须有对象才行,所以,必须有一个属性能够说明这个对象,即Target属性。
作为集合类,其中的方法和属性却有些奇怪,下面一一作分析:
 

成员
奇怪内容
解释
Target
一个集合应该没有Target的,或者说,Target也应该是一个集合
这个Target实际上是指向了其最后一个函数实例的对象。、
Method
与上同
与上同
GetInvocationList
取得调用列表时,应该返回一个集合的列表,而在返回的列表中,每一个对象都是一个委托。
委托是一个集合,这个集合里的每一个成员又是一个委托,而每个成员却是只有一个成员的集合。实验也证明了这一点,遍历这个list,然后取得每一个成员,取个每个成员的集合,发现这个集合只有一个成员。
dl(1,2)
从对象角度考虑,应该不会有直接调用对象之说,但在这里却可以。
.NET框架实际在这里做了特化处理,具体处理如下:
如果这个委托实例只有一个元素,则调用这个元素,如果这个委托实例有多个元素,则依次调用每个元素的这个方法。
 
概念
delegate:是一个类Delegate,这个类在与委托相关的类上相当于System.Object对应于其它类。
委托(一般说的概念):指用delegate声明了的一种类型,实际上是一个类,继承自MulticaseDelegate。
委托实例:是一个对象,这个对象是属于一个委托类型。
事件:就是一个委托实例,即一个对象。一般说,使用一个事件,实际上并不是使用一个特殊的名词,而是使用一个委托实例(即一个对象)。
 
4.委托的返回值的捕获
在调用时,不直接调,通过遍历其委托链表,依次调用,然后把返回值传到一个序列对象里面去,则可以得到返回值。
2.   委托的调用
执行returnInt=a.dl(1,2)时,实际上是执行了如下动作:
(1)    得到链表
(2)    依次调用链表中的方法
即returnInt=a.dl(1,2)相当于
Delegate[] ds=a.GetInvocationList();
foreach(Delegate d in ds)
{
DL dl=(DL)d;
returnInt=d.Invoke(1,2);
}
从语言进化角度理解c#(委托篇) c#1 是在2002年初的时候发布的,目前开发语言有很多,我个人还是觉得c++,java,c#算是老大哥级别,天下游戏一大抄,其实语言也是一样。虽然每个语言的设计者都不一样,但大家的核心思想还是比较接近的(大家都是互相抄的) 那么在c#1时代,最具代表性的几个语言特点是什么呢。我觉得有下面几个: 1:委托 2:属于c#的类型系统 3: 4:元表与反射 5:接口 6:值与引用,两种类型所涉及的托管与非托管机制 不急不急,那我们来一个个聊, 先来聊聊第一个。委托是什么东西: ... 阅读详情

相关推荐

获取所有委托返回值

如果委托有返回值,直接执行委托,只会返回最后一个方法的返回值。 本实例演示如何获取委托链中所有的返回值。

【什么是委托】

委托是对函数的引用,它是一个引用类型,类似c/cpp中的函数指针。但它是类型安全的。委托是一个类,定义了方法的类型,可以将方法当做另一个方法的参数传递。 委托就是一个安全的函数指针,用来执行函数方法的东西。 【如何使用委托】 在.Net框架下,委托的使用方法经历了多次改变。 最初委托的使用方法如下: public delegate string MyDelegate(strin

yangmingxing980的专栏 729

SAP入门技术分享四:模块化程序

SAP入门技术分享三:模块化程序

ITxiaoangzai的博客 1152

C#委托学习(三):委托链—同时委托多个方法

上一节中介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的说话,既然委托也是一个代表,那他如果只能代表一个人,那他的魅力就不是很大了吧,所以我们就会委托能不能代表多个方法的? 答案是可以的,这就是本节要讲的内容——委托链,委托链也是一个委托,

Sayesan的专栏 8113

如何区分Info与CoWoS封装?

这篇文章主要从Info、CoWoS封装的定义、Interposer的种类以及Info、CoWoS封装的种类三方面进行了介绍,希望读者能够有所收获

wangyubo1的博客 7938

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链

[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链 引言: 上一专题介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的说话,既然委托也是一个代表,那他如果只能代表一个人,那他的...

fgmah2000的博客 205

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 523

从IL角度彻底理解回调_委托_指针

1.创作此文的背景 又是一个月的时间没写博文,瞎忙活,来武汉重新上班了,武汉这边中小学都开学了,很安全,大家可以放心 来商务出差个人游玩,重新招了个后端进团队,一个是在QQ技术群认识的,在他身上放佛看到了过去的自己,希 望以后能帮我分担更多的工作,得组织培训,分配任务,完成新目标(铁路动环系统的重构),还需要再招一个 得力的,能认真工作,分析问题解决问题,分担一部分压力的。走走停停的,好了不说废话了,下面进入正文。 写本篇博客的目的 1.1.委托能帮助代码更好地封装 1.2.委托能随时随地更方便地运行其他类

chinaherolts2008的博客 281

无线充电效率从75%到90%+:深入拆解LCC补偿网络如何成为电动汽车和智能车竞赛的‘稳压器’

本文深入探讨了LCC补偿网络如何显著提升无线充电效率至90%以上,成为电动汽车和智能车竞赛中的关键技术。通过分析LCC的三元件结构和双模式切换特性,揭示了其在负载突变和线圈错位情况下的稳定性优势,并展示了实际应用中的效率提升和产业化挑战。

weixin_42528191的博客 397

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7237

用面向对象思维理解.NET委托:函数是对象、委托是函数对象的类型

不谈C/C++,就从对象和类型考虑.NET委托(delegate),笔者的看法是:函数是对象、委托是函数对象的类型。     教科书上讲:具有同属性的实体抽象成类型。那么,程序代码中函数的属性是啥?就是函数签名,即函数返回类型、函数参数类型。进一步,具有相同属性的函数抽象成啥呢?就是.NET中所谓的委托(delegate),它就是函数的类型。与普通对象与类型不同,委托的对象(函数)可以不

guoggn的专栏 587

AI与Agent赋能下的软件测试变革:面向未来测试工程师的工作方法论

AI Agent 软件测试 测试 software testing test

测试技师的自我修养 1234

CLR之委托的揭秘(一)

初识委托: 在之前的学习中我们已经可以把对象,值,数组当作参数传递给方法,但是有没有可能把方法也当作参数传递给方法呢?有了这个想法于是就有了委托。方法当作一种参数去传递,但是方法有的有返回值有的没有返回值,这如何处理?委托又用在什么地方?通过这篇文章我们来学习一下委托的用法 委托解密: 在C#中要使用委托。必选先...

diansumao2434的博客 241

PCL 均匀采样【2026最新版】

根据输入点云数据创建一个微小的三维立方体集合,然后计算每个三维立方体的重心;由于该重心点不一定是原始点云中的点,直接用该点来表示立方体内所有的点会丢失原始点云的细小特征;所以使用k最近邻搜索寻找距离重心点最近的原始点来代替重心点。

点云侠的博客 41万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS委托理解

定义: 委托是指给一个对象提供机会对另一个对象中的变化做出反应或者影响另一个对象的行为。个人理解: Coding时,无论界面还是复杂的逻辑。从抽象的角度来说,可以分解成好多模块(类似对象、模块大概的意思)。比如有的模块负责显示、有的模块负责数据处理等。 我理解的委托就是负责A、B两个对象通信用的。 如: A->B; 可以通过将B作为A的变量完成A对B的“指挥” 而此时,若B想传信息给A

skwaityou的专栏 685

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32底层逻辑:时钟树、存储映射与中断向量表的硬件本质

STM32底层开发不是API调用或寄存器背诵,而是对芯片物理运行机制的理解。其核心在于三大基础概念:时钟树——CPU与外设间纳秒级的动态调度协议;存储映射——地址空间背后是总线译码与硬件片选的真实物理连接;中断向量表——CPU内核硬连线的异常跳转锚点,而非普通数组。这些机制共同决定了系统稳定性、实时性与抗干扰能力,直接影响工业级应用中-40℃长期运行、EMC合规、低功耗设计等关键指标。本文聚焦STM32F103等主流型号,结合真实产线问题(如时钟门控失效、APB2未使能导致GPIO写无效、向量表复制遗漏引发

weixin_34116110的博客 414

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

链方法[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链

最近研究链方法,稍微总结一下,以后继续补充:      弁言:       上一专题分析了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的分析都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的谈话,既然委托也是一个代表,那他如果只能代表一个人,那他的魅力就不是很大了吧,所以我们就会委托能不能...

weixin_33898876的博客 115
上一篇: ASP.NET分析(一)--运行机制
dobly
博客等级 码龄24年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值