delegate

更新时间:2022-10-26 14:31

委托(delegate)是一种类型安全的函数指针,用于通用语言运行库(CLI)。在C#中,delegate是一种class,包装了一个或多个函数指针及绑定的类实例。Delegate用来实现函数回调与事件接收(event listener)。Delegate对象可以作为参数传递给其他函数,以引用(referenced)封装在delegate对象中的函数,而无需在编译时刻就绑定被调用函数。

技术实现细节

“委托”作为类,继承自System.MulticastDelegate(抽象类)。可以认为包含:一个类对象实例的地址(Target属性),该类的一个方法的地址(Method属性),以及另一个“委托”实例的引用(reference)。因此引用一个“委托”对象,可能实际上引用了多个“委托”的实例。“委托”对象被调用时,依次调用里面的多个“委托”的实例。这对于事件驱动的程序比较有用。

如果“委托”封装了一个静态函数,则其内部的绑定的类对象地址为null。

可以通过Delegate类的GetInvocationList()取出这些委托,并查看其Target和Method属性,获取所引用的方法名等信息。

类型特征

型签(英语:type signature)或型标(type annotation)是计算机科学中对程序的函数、方法、子过程、以及变量等给出其类型。特别是对函数给出其输入参数数量、类型与次序及输出结果的类型。许多编译器产生的内部使用的函数名包含了其类型特征,这称为名字修饰,给链接器辨别不同的函数提供了方便。

类型特征的现代应用:

函数指针

函数指针是一种在CC++D语言、其他类C语言和Fortran2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如C这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。

函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。

通用语言运行库

通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.NET虚拟机所选用的名称。它是微软对通用语言架构(CLI)的实现版本,它定义了一个代码运行的环境。CLR运行一种称为通用中间语言字节码,这个是微软的通用中间语言实现版本。

CLR运行在微软的视窗操作系统上。查看通用语言架构可以找到该规格的实现版本列表。其中有一些版本是运行在非Windows的操作系统中。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}