是否可以扩展System.Delegate?

时间:2009-04-15 16:11:35

标签: delegates cil

无法从C#中继承System.Delegate或System.MulticastDelegate。只要您声明标准的“运行时管理”方法,就可以在MSIL中完成它。但是,每次我在类型中添加“cil managed”方法时,我都会得到:

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

是否可以扩展Delegate / MulticastDelegate?

2 个答案:

答案 0 :(得分:8)

在C#中没有自己的自定义代码。来自C#3.0规范的第10.1.4节:

  

类类型的直接基类   不得为以下任何一种情况   类型:System.ArraySystem.Delegate,   System.MulticastDelegateSystem.Enum,   或System.ValueType。此外,一个   泛型类声明不能使用   System.Attribute作为直接或   间接基类。

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

来自ECMA-335,第8.9.3节:

  

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

这听起来像是禁止施工人员。我个人使用普通类型的静态方法。

答案 1 :(得分:1)

您可能有兴趣查看Rick Strahl的以下post,其中他比较了动态委托创建的不同方法。