3

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

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

是否可以扩展 Delegate/MulticastDelegate?

4

2 回答 2

10

不是使用您自己的自定义代码,在 C# 中。从 C# 3.0 规范的第 10.1.4 节:

类类型的直接基类不能是以下任何类型:System.ArraySystem.DelegateSystem.MulticastDelegateSystem.EnumSystem.ValueType。此外,泛型类声明不能 System.Attribute用作直接或间接基类。

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

ECMA-335,第 8.9.3 节:

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

这听起来像是在禁止构造函数。我个人会使用普通类型的静态方法。

于 2009-04-15T16:13:22.730 回答
3

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

于 2009-04-15T18:57:44.753 回答