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

时间:2010-12-15 23:23:27

标签: c# .net optimization compiler-construction yield

当我从 C#深度http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx中看到一个示例章节时,我正在阅读yield关键字。

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

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

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

6 个答案:

答案 0 :(得分:14)

你可以使用Reflector看看,这可能是你最好的选择:

http://reflector.red-gate.com

答案 1 :(得分:9)

提交人自己提到:

  

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

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

答案 2 :(得分:4)

可能两者都有。使用Reflector对编译的程序集进行逆向工程很容易。而C#语言规范是一个公共文档,它定义了各种语法含糖事物的编译方式。作者可以使用任何一种方法,或两者​​的混合。

答案 3 :(得分:4)

查看ildasm以查看已编译的IL。

(真的,一旦你睁大眼睛,这很有趣)

答案 4 :(得分:2)

.NET CLR实际上有一种名为MSIL的程序集,以及汇编程序和解析程序。所以,是的,您可以实际编译代码,然后查看确切编译的CLR指令。

http://www.4guysfromrolla.com/articles/080404-1.aspx

答案 5 :(得分:1)

JetBrains

dotPeek

https://www.jetbrains.com/decompiler/

它免费且易于使用:)