代码之家  ›  专栏  ›  技术社区  ›  Prankster

是否可以扩展System.Delegate?

  •  2
  • Prankster  · 技术社区  · 17 年前

    无法从C中的System.Delegate或System.MulticastDelegate继承。只要声明标准的“运行时托管”方法,就完全可以在MSIL中执行此操作。但是,每次我向类型添加“cil托管”方法时,我都会得到:

    System.TypeLoadException:运行时实现的委托方法的定义非法。

    是否可以扩展委托/多播委托?

    2 回复  |  直到 17 年前
        1
  •  8
  •   Jon Skeet    17 年前

    不用你自己的自定义代码,用C。根据C 3.0规范第10.1.4节:

    类类型的直接基类 不得为以下任何一项 类型: System.Array , System.Delegate , System.MulticastDelegate , System.Enum , 或 System.ValueType . 此外,A 泛型类声明不能使用 System.Attribute 直接或 间接基类。

    但是,每次创建委托类型时,都会自动从 MulticastDelegate .

    ECMA-335 第8.9.3节:

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

    听起来像是禁止建造工人。我个人会在普通类型中使用静态方法。

        2
  •  1
  •   alex    17 年前

    您可能对以下内容感兴趣 post 来自Rick Strahl,他比较了动态委托创建的不同方法。