在 C# 中不能从 System.Delegate 或 System.MulticastDelegate 继承。只要您声明标准的“运行时管理”方法,就完全可以在 MSIL 中执行此操作。但是,每次我向类型添加“cil 管理”方法时,我都会得到:
System.TypeLoadException:运行时实现的委托方法的非法定义。
是否可以扩展 Delegate/MulticastDelegate?
不是使用您自己的自定义代码,在 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 提供,而不是用户代码。可以在委托类型上定义的唯一附加成员是静态或实例方法。
这听起来像是在禁止构造函数。我个人会使用普通类型的静态方法。
您可能有兴趣查看 Rick Strahl 的以下帖子,其中他比较了动态委托创建的不同方法。