当我在看的时候Action
Reflector 中的委托,我看到它有一个像这样的构造函数
public Action(object @object, IntPtr method);
但我找不到任何机构以及其他成员职能,例如Invoke
, BeginInvoke
等等。我只能看到它的定义。这些函数是在哪里定义的?它们是在 .net BCL 之外定义的吗?
基本上,委托是由 CLR 专门处理的。编译器提供签名,但 CLR 知道如何处理它们。
第 8.9.3 条ECMA-335分区我谈到这个:
委托是面向对象的函数指针的等价物。与函数指针不同,委托是
面向对象、类型安全且可靠。委托是通过定义派生自基类型的类来创建的
System.Delegate(请参阅分区 IV)。每个委托类型应提供一个名为 Invoke 的方法,并带有适当的
参数,并且委托的每个实例都会将对其 Invoke 方法的调用转发给一个或多个兼容的
特定对象的静态或实例方法。它委托的对象和方法是在以下情况下选择的:
委托实例已创建。
除了实例构造函数和 Invoke 方法之外,委托还可以选择另外两个
方法:BeginInvoke 和 EndInvoke。这些用于异步调用。
虽然在大多数情况下,委托似乎只是另一种用户定义的类,但它们紧密相连
受控。这些方法的实现由 VES 提供,而不是用户代码。唯一额外的
可以在委托类型上定义的成员是静态方法或实例方法。
(VES 是虚拟执行系统;CLR 是 Microsoft 对 VES 的实现。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)