手写的CIL能做C#做不到的事吗?

Can hand-written CIL do things that C# cannot?

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

如果我以某种方式手动生成 CIL 代码,是否可以做一些在 C# 中被禁止的事情?什么样的东西? (显然,我并不期待一份详尽的清单。)

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

当然可以。没有什么能让你完成不可能用 C# 编码的任务(图灵完备性等),但有一些编程结构目前没有在 C# 中公开。请注意,即将推出的 C# 6 添加了其中一些内容。

一个肯定不完整的列表,超出了我的头脑:

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

我确定还有更多。