所以这是一个非常简单的问题,但我在任何地方都没有看到答案。
如果我以某种方式手动生成CIL代码,是否可以执行C#中禁止的操作?什么样的东西? (显然我并不期待详尽的清单。)
我还没有深入研究CIL的细节。但鉴于CLR应该是与语言无关的,但支持用不同语言编写的组件之间的紧密耦合,我希望CIL能够在对象级工作,并且可能有自己的类型系统。我可以想象类型系统不如C#严格,可能还有一些其他可能不同的东西。但我想知道是否有人明确地知道而不必阅读整个语言规范......
答案 0 :(得分:2)
不确定。没有任何东西能让你实现无法用C#编写的任务(Turing-completeness等),但是目前没有在C#中公开的编程结构。请注意,即将推出的C#6会增加其中一些。
一个肯定不完整的清单,在我的头顶:
try .. fault
块。它们仅在异常退出try
块时执行。catch .. when
。enum
上的通用类型约束。protected
和 internal
可见性修饰符(您必须是同一程序集中的派生类才能访问该字段) 我确信还有更多。