当我看着反射的Action
代表,我看到它有一个像代表的构造函数和成员函数是在哪里定义的?
public Action(object @object, IntPtr method);
一个构造函数,但我找不到任何机构一样与其他成员函数一样Invoke
,BeginInvoke
等我可以只能看到它的定义。这些功能在哪里定义?它们是否定义在.net BCL之外?
当我看着反射的Action
代表,我看到它有一个像代表的构造函数和成员函数是在哪里定义的?
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是微软的落实VES)的
乔恩斯基特来救援!感谢这个有价值的信息。 – 2010-10-05 09:21:12