编译/优化后如何查看C#代码?

13

我在阅读有关 yield 关键字的内容时,发现了一篇来自C# in Depth 的样例章节:http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx

第一个代码块利用 yield 关键字创建了一个简单的迭代器。但是,第二个代码块展示了编译器处理完这段代码之后的结果。其中,yield 语句被拆分成了状态机等多个部分。

页面上还有其他几个代码例子,也说明了编译器对代码进行修改的情况。

我的问题是:作者实际上是否能够访问编译后的代码,还是仅仅推断出它将会是怎么样的?


反射器是你的好朋友。 - Mitch Wheat
1
这个问题的真正答案应该是“非常容易!” - Mitch Wheat
Reflector确实是你的朋友。 - Tim Barrass
6个回答

15

刚刚下载了,谢谢提示!非专业版是否仍然能够与VS集成? - Chris Laplante

9

作者本人提到:

显然,编译器并没有实际产生C#代码,但我使用了Reflector将代码反编译为C#。

在同一段落中,标题为高级概述:这个模式是什么?


哇,这就是为什么浏览文章不会让你走得太远的原因 :)。谢谢! - Chris Laplante
5
@SimpleCoder,如果你想要使用C#,你需要保持敏锐的视力,我的朋友 =)。 - BeemerGuy

4

可能两种方法都用到了。使用Reflector可以很容易地反编译已编译的程序集。而定义各种语法糖如何编译的C#语言规范是公开的文件。作者可能使用了其中一种方法,或两种方法的混合。


4

请查看 ildasm,以查看编译后的IL。

一旦你入门了,这实际上是非常有趣的事情。


2

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接