手写的CIL可以做C#不能做的事情吗?

时间:2015-03-17 19:26:29

标签: c# cil

所以这是一个非常简单的问题,但我在任何地方都没有看到答案。

如果我以某种方式手动生成CIL代码,是否可以执行C#中禁止的操作?什么样的东西? (显然我并不期待详尽的清单。)

我还没有深入研究CIL的细节。但鉴于CLR应该是与语言无关的,但支持用不同语言编写的组件之间的紧密耦合,我希望CIL能够在对象级工作,并且可能有自己的类型系统。我可以想象类型系统不如C#严格,可能还有一些其他可能不同的东西。但我想知道是否有人明确地知道而不必阅读整个语言规范......

1 个答案:

答案 0 :(得分:2)

不确定。没有任何东西能让你实现无法用C#编写的任务(Turing-completeness等),但是目前没有在C#中公开的编程结构。请注意,即将推出的C#6会增加其中一些。

一个肯定不完整的清单,在我的头顶:

  • try .. fault块。它们仅在异常退出try块时执行。
  • 异常过滤器。 VB已经拥有它们,而C#6也将拥有它们:catch .. when
  • Struct(值类型)无参数构造函数。 C#6将拥有它们。 编辑:svick评论该功能已被删除。
  • enum上的通用类型约束。
  • protected internal可见性修饰符(您必须是同一程序集中的派生类才能访问该字段)

我确信还有更多。