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

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

【医学影像】超声(UltraSound)影像的增强与目标检测

文章目录1 综述1.1 超声发展简史1.2 超声类型2 超声影像的去噪与增强2.1 各向异性扩散去噪模型2.2 色彩恢复的视网膜增强算法SSR和MSR2.3 MSRCR增强算法(基于MSR算法改进版)2.4 参考文献3 超声影像的目标识别3.1 基于跨模态数据迁移进行DL训练3.2 参考文献 1 综述 因工作需要,最近调研了超声(UltraSound)影像的相关知识,包含超声类型、超声影像的去噪和增强,目标检测等,并对相关资料文献进行梳理整合。 本人另外一篇博文主要讲了UltraSound 影像与CT/MR

muyijames的博客 1万+

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

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

Sayesan的专栏 8113

KEPServerEX与三菱iQ-R系列PLC通讯

KEPServerEX与三菱iQ-R系列PLC通讯Mitsubishi Ethernet北京东方鼎晨科技有限公司目 录1. 前言2. 三菱PLC端相关设置3. Kepware端相关设置KEPServerEX是美国PTC Kepware公司生产的具有行业性的连接平台,KEPServerEX支持150多种通讯协议,用于向您的所有应用程序提供单一来源的工业自动化数据。该平台的设计使用户能够通过一个直观的用户界面来连接、管理、监视和控制不同的自动化设备和软件应用程序。KEPServerEX利用OPC(自动化产业的互

qq_28768521的博客 8096

CentOS7上装不了最新Chrome?别折腾依赖了,试试这个老版本安装法(附103.0.5060.24 beta下载地址)

本文提供了在CentOS7上安装兼容版Chrome的详细指南,解决了因GLIBC版本限制导致的最新版Chrome无法安装的问题。推荐使用Chrome 103.0.5060.24 beta版本,并附有下载地址和完整安装步骤,包括禁用自动更新和配套工具安装,确保系统稳定性和功能完整性。

weixin_29289821的博客 569

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

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

fgmah2000的博客 205

EPICS电机支持(asynMotor)

EPICS电机支持(asynMotor)

yuyuyuliang00的博客 915

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

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

chinaherolts2008的博客 281

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

给STM32 LWIP做一次‘性能体检’:手把手教你用Wireshark和iperf诊断网络瓶颈

本文详细介绍了如何使用Wireshark和iperf工具对STM32 LWIP网络性能进行全面诊断,帮助开发者精准定位网络瓶颈问题。通过搭建测试环境、集成iperf测试框架、深度报文分析和LWIP配置优化,实现从9KB/s到80MB/s的性能飞跃,特别适用于解决TCP发送速率和卡死问题。

weixin_29631169的博客 288

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

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

guoggn的专栏 587

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

CLR之委托的揭秘(一)

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

diansumao2434的博客 241

基于STM32+4G模块设计的智能灌溉系统

当前智能灌溉系统分为三个部分:温湿度采集部分、灌溉系统部分、OneNet云平台。 灌溉系统部分增加刷卡功能,用户可以通过IC卡刷卡将金额刷到灌溉系统设备里,灌溉系统设备里会记录金额,并且在手机可视化页面上会显示当前的设备金额。 金额会随着时间进行递减,按分钟计费,如果计费到0,就无法启动灌溉,需要重新充值金额才能继续。

4513

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS委托理解

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

skwaityou的专栏 685

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

weixin_34116110的博客 414

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

链方法[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、付费专栏及课程。

余额充值