2010-12-15 81 views
10

我在阅读关于yield关键字时,我遇到了C#深度http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx的示例章节。如何在编译/优化后查看C#代码?

第一块代码利用yield关键字来制作一个简单的迭代器。但是,第二个代码块在编译器与它一起使用之后显示了此代码。除此之外,它已将yield语句分解为状态机。

编译器修改的代码的其他几个示例在页面上显而易见。

我的问题是:作者是否真的可以在编译后访问代码,或者他推断出它会是什么样子?

+0

反射是你的朋友 – 2010-12-15 23:25:17

+1

真正的这个问题的答案应该是 “太容易!” – 2010-12-15 23:26:23

+0

反射器真的是你的朋友。 – 2010-12-15 23:30:17

回答

13

您可以使用反射来看看,这可能是你最好的选择:

http://reflector.red-gate.com

+0

刚下载它,谢谢你的提示!非Pro版本是否仍与VS集成? – 2010-12-15 23:32:37

4

也许两者兼而有之。使用Reflector反编译编译程序集非常简单。 C#语言规范定义了如何编译各种语法含糖的东西,它是一个公共文档。提交人本可以使用这两种方法中的一种或两种的混合物。

4

检查出ildasm来看看编译的IL。

(说真的,这是很好的乐趣,一旦你在你的眼睛)

8

自己提到的作者:

显然编译器实际上并不产生C#,但我用反射反编译代码为C#。

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

+0

哇。这就是为什么浏览文章不会让你感觉很远:)。谢谢! – 2010-12-15 23:29:49

+4

@SimpleCoder - 如果你想** C#**,我的朋友=),你需要能够**看到清晰的**。 – BeemerGuy 2010-12-15 23:31:01