Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代表在哪里';是否定义了构造函数和成员函数?_C#_.net_Delegates_Reflector - Fatal编程技术网

C# 代表在哪里';是否定义了构造函数和成员函数?

C# 代表在哪里';是否定义了构造函数和成员函数?,c#,.net,delegates,reflector,C#,.net,Delegates,Reflector,当我在Reflector中查看操作委托时,我看到它有一个类似 public Action(object @object, IntPtr method); 但是我找不到与其他成员函数(如Invoke、BeginInvoke等)相同的任何主体。我只能看到它的定义。这些功能是在哪里定义的?它们是在.net BCL之外定义的吗?委托基本上是由CLR专门处理的。编译器提供签名,但CLR知道如何处理它们 第一部分第8.9.3节讨论了这一点: 委托是函数指针的面向对象等价物。与函数指针不同,委托是 面向对象

当我在Reflector中查看
操作
委托时,我看到它有一个类似

public Action(object @object, IntPtr method);

但是我找不到与其他成员函数(如
Invoke
BeginInvoke
等)相同的任何主体。我只能看到它的定义。这些功能是在哪里定义的?它们是在.net BCL之外定义的吗?

委托基本上是由CLR专门处理的。编译器提供签名,但CLR知道如何处理它们

第一部分第8.9.3节讨论了这一点:

委托是函数指针的面向对象等价物。与函数指针不同,委托是 面向对象、类型安全和安全。委托是通过定义从基类型派生的类来创建的 系统委托(见第四部分)。每个委托类型都应提供一个名为Invoke的方法,并提供适当的 参数,并且委托的每个实例将对其调用方法的调用转发给一个或多个兼容的 特定对象上的静态或实例方法。它所委托的对象和方法是在 将创建委托实例

除了实例构造函数和Invoke方法之外,委托还可以有两个附加的 方法:BeginInvoke和EndInvoke。它们用于异步调用

虽然在大多数情况下,委托看起来只是另一种用户定义的类,但它们紧密相连 受约束的。这些方法的实现是由VES提供的,而不是用户代码。唯一的补充 可以在委托类型上定义的成员是静态方法或实例方法


(VES是虚拟执行系统;CLR是微软对VES的实现。)

Jon Skeet救命!谢谢你的宝贵信息。