【发布时间】:2015-05-20 09:45:06
【问题描述】:
所以这是一个非常简单的问题,但我在任何地方都找不到答案。
如果我以某种方式手动生成 CIL 代码,是否可以执行 C# 中禁止的操作?什么样的事情? (显然,我并不期待一份详尽的清单。)
我还没有深入研究 CIL 的细节。但鉴于 CLR 应该与语言无关,但支持用不同语言编写的组件之间的紧密耦合,我希望 CIL 可以在对象级别工作,并且可能有自己的类型系统。我可以想象该类型系统不如 C# 严格,并且可能还有其他一些可能不同的东西。但我想知道是否有人无需阅读整个语言规范就能明确知道...
【问题讨论】:
-
CLI Specification (ECMA-335) 可用。它相当大(并且需要挖掘),但它确实明确指出了语言之间的一些问题 - 并揭示了“可以”做什么。
-
简单的答案是肯定的。但可能不是你特别想做的任何事情。如果您查看 Roslyn github repo 上的问题,具体示例会不时出现。
-
当然,例如 C# 不支持模块构造函数。或者事件的 raise 访问器。或对枚举和委托的约束。或用户定义的值类型。够了吗?
-
是的。首先,您可以在
System.Enum和System.Delegate上表达泛型类型约束... -
鉴于有些事情可以用 .NET 语言而不是 C# 而不是 C# 来完成,显然可以在 MSIL 而不是 C# 中完成一些事情。只需搜索任何“VB/F#/J#/etc. 和 C# 有何不同”来查找示例。