是否有可能扩展 System.Delegate?

发布于 2024-07-17 07:12:02 字数 317 浏览 8 评论 0原文

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

System.TypeLoadException: IllegalDefinition for Runtime Implemented delegate method.

Is it at all possible toextend Delegate/MulticastDelegate ?

It is not possible to inherit from System.Delegate or System.MulticastDelegate in C#. It is perfectly possible to do it in MSIL as long as you declare standard 'runtime managed' methods. However, every time I am adding a 'cil managed' method to the type, I am getting:

System.TypeLoadException: Illegal definition for runtime implemented delegate method.

Is it at all possible to extend Delegate/MulticastDelegate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

写下不归期 2024-07-24 07:12:02

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

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

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

来自 ECMA-335,第 8.9.3 节:

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

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

Not with your own custom code, in C#. From section 10.1.4 of the C# 3.0 spec:

The direct base class of a class type
must not be any of the following
types: System.Array, System.Delegate,
System.MulticastDelegate, System.Enum,
or System.ValueType. Furthermore, a
generic class declaration cannot use
System.Attribute as a direct or
indirect base class.

However, every time you create a delegate type, that automatically derives from MulticastDelegate.

From ECMA-335, section 8.9.3:

While, for the most part, delegates
appear to be simply another kind of
user-defined class, they are tightly
controlled. The implementations of the
methods are provided by the VES, not
user code. The only additional members
that can be defined on delegate types
are static or instance methods.

That sounds like it's prohibiting constructors. I'd use a static method in a normal type instead, personally.

久光 2024-07-24 07:12:02

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

You may be interested in looking at the following post from Rick Strahl where he compares different methods of dynamic delegate creation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文