C# .NET中CIL知识的优势

C# .NET中CIL知识的优势,c#,.net,cil,C#,.net,Cil,了解CIL有什么好处 你必须了解汇编才能理解它吗?这些文件中的代码看起来很相似 我该如何进一步了解它?有没有像Jon Skeet的C#book这样的书?也许你可以用CIL做些什么,但我想不出一个实际的例子。无论如何,这里有一个教程: 您不必了解汇编就可以学习它-它与本机汇编完全分离。尽管在运行时,CLR基本上会将其交给本机程序集 几个可能的优点: 1) 您可以查看编译器输出的CIL,并具体查看代码正在执行的操作 2) 为了解决某些类型的问题,您可能在某个时候需要动态生成代码……例如,由于Micr

了解CIL有什么好处

你必须了解汇编才能理解它吗?这些文件中的代码看起来很相似


我该如何进一步了解它?有没有像Jon Skeet的C#book这样的书?

也许你可以用CIL做些什么,但我想不出一个实际的例子。无论如何,这里有一个教程:


您不必了解汇编就可以学习它-它与本机汇编完全分离。尽管在运行时,CLR基本上会将其交给本机程序集

几个可能的优点:

1) 您可以查看编译器输出的CIL,并具体查看代码正在执行的操作


2) 为了解决某些类型的问题,您可能在某个时候需要动态生成代码……例如,由于Microsoft的policy injector框架还没有达到标准,我们需要这种类型的行为,因此我们编写了一些低级的、框架类型的管道。

在学习IL和CLR时,我发现这些书很有用:

  • ,谢尔盖·利丁

  • ,约翰·高夫

  • 当然,你也会想要这个

只要通读它们就会给你很多信息

(我也听说这本书很好,但我自己没读过。)

了解IL和CLR将在遇到问题时为您提供帮助。(一个泄漏的抽象?)尽管现在有了像Reflector这样的好的反编译器,我发现自己并没有那么多地使用ildasm

理解汇编并不是必需的,但它会有所帮助。实际上,IL在很大程度上相当简单


IL派上用场的一个例子是确定F#编译某些结构的确切方式。另一个是能够使用DynamicMethod和System.Reflection.Emit,这可以在某些情况下打开一些不错的解决方案。

了解CIL可以让您在某些边缘情况下从.NET framework中获得更多信息

请注意,您不必阅读原始操作码就能从这些知识中获益。IL和组件的一般知识,加上可以创造奇迹:


PS:对我来说,获得一些实用IL知识的最佳途径是阅读一些规则的C#代码(它是FxCop的一个类似物,使用Mono.Cecil进行代码内省)。此外,本文是一个很好的开端:.

CIL比常规汇编程序imo简单得多。在很大程度上,这是因为虚拟机是基于堆栈的,所以所有内容都进入堆栈,并且没有要跟踪的寄存器

此外,还没有偏移量计算,没有直接内存操作,方法调用使用.NET名称列出,等等。我想,如果您对任何其他类型的汇编语言有一点经验,您可能会很快掌握CIL代码的要点

我个人认为,启动ILDasm或Reflector来查看C#编译器为某些代码实际生成的IL非常有用。对于许多较新的特性,如匿名委托/lambda、捕获的变量、迭代器等,检查IL非常有用


其他人提到了好书,我将投票给Serge Lidin的专家.NET 2.0 IL汇编程序。它有所有血淋淋的细节。如果你想要更接近C的东西,杰弗里·里瑟(Jeffrey Ricther)通过C的CLR非常棒。乔恩·斯基特的书很好,但它并没有真正涵盖CIL

这个问题主要是关于学习它的好处