当我从 C#深度:http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx中看到一个示例章节时,我正在阅读yield
关键字。
第一个代码块使用yield
关键字来创建一个简单的迭代器。但是,第二个代码块在编译器使用它之后显示了这段代码。除此之外,它还将yield
语句分解为状态机。
编译器修改的其他几个代码示例在页面上很明显。
我的问题是:作者是否真的能够在编译后访问代码,或者他是否推断出它会是什么样子?
答案 0 :(得分:14)
你可以使用Reflector看看,这可能是你最好的选择:
答案 1 :(得分:9)
提交人自己提到:
显然编译器实际上并没有生成C#,但我使用Reflector将代码反编译为C#。
在同一段中标题为高级概述:模式是什么?
答案 2 :(得分:4)
可能两者都有。使用Reflector对编译的程序集进行逆向工程很容易。而C#语言规范是一个公共文档,它定义了各种语法含糖事物的编译方式。作者可以使用任何一种方法,或两者的混合。
答案 3 :(得分:4)
查看ildasm以查看已编译的IL。
(真的,一旦你睁大眼睛,这很有趣)
答案 4 :(得分:2)
.NET CLR实际上有一种名为MSIL的程序集,以及汇编程序和解析程序。所以,是的,您可以实际编译代码,然后查看确切编译的CLR指令。
答案 5 :(得分:1)