【问题标题】:Where does delegates' constructors and member functions are defined?委托的构造函数和成员函数在哪里定义?
【发布时间】:2010-10-05 08:52:59
【问题描述】:

当我在 Reflector 中查看 Action 代表时,我看到它有一个类似的构造函数

public Action(object @object, IntPtr method);

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

【问题讨论】:

    标签: c# .net delegates reflector


    【解决方案1】:

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

    ECMA-335分区的第8.9.3节我谈到了这个:

    委托是函数指针的面向对象等价物。与函数指针不同,委托是 面向对象、类型安全和安全。委托是通过定义派生自基类型的类来创建的 System.Delegate(参见分区 IV)。每个委托类型都应提供一个名为 Invoke 的方法,并带有适当的 参数,并且委托的每个实例都将对其 Invoke 方法的调用转发给一个或多个兼容的 特定对象的静态或实例方法。它委托的对象和方法在何时被选择 委托实例已创建。

    除了实例构造函数和 Invoke 方法之外,委托还可以选择另外两个 方法:BeginInvoke 和 EndInvoke。这些用于异步调用。

    虽然在大多数情况下,委托似乎只是另一种用户定义的类,但它们是紧密的 受控。方法的实现由 VES 提供,而不是用户代码。唯一的额外 可以在委托类型上定义的成员是静态或实例方法。

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

    【讨论】:

    • 乔恩·斯基特来救援!感谢您提供这些宝贵的信息。
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多