无法从C#中继承System.Delegate或System.MulticastDelegate。只要您声明标准的“运行时管理”方法,就可以在MSIL中完成它。但是,每次我在类型中添加“cil managed”方法时,我都会得到:
System.TypeLoadException:运行时实现的委托方法的非法定义。
是否可以扩展Delegate / MulticastDelegate?
答案 0 :(得分:8)
在C#中没有自己的自定义代码。来自C#3.0规范的第10.1.4节:
类类型的直接基类 不得为以下任何一种情况 类型:
System.Array
,System.Delegate
,System.MulticastDelegate
,System.Enum
, 或System.ValueType
。此外,一个 泛型类声明不能使用System.Attribute
作为直接或 间接基类。
但是,每次创建委托类型时,都会自动派生自MulticastDelegate
。
来自ECMA-335,第8.9.3节:
虽然在大多数情况下代表们 似乎只是另一种 用户定义的类,它们是紧密的 受控。的实现 方法由VES提供,而不是 用户代码。唯一的额外成员 可以在委托类型上定义 是静态或实例方法。
这听起来像是禁止施工人员。我个人使用普通类型的静态方法。
答案 1 :(得分:1)
您可能有兴趣查看Rick Strahl的以下post,其中他比较了动态委托创建的不同方法。