首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算机集成学习在.NET中的优势

计算机集成学习在.NET中的优势
EN

Stack Overflow用户
提问于 2009-02-11 17:57:08
回答 5查看 2.6K关注 0票数 7

了解CIL的好处是什么?

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

如何了解更多信息?有没有像Jon Skeet的C#这样的书?

EN

回答 5

Stack Overflow用户

发布于 2009-02-11 18:11:02

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

只要通读一遍,你就会得到很多信息。

(我也听说过CLR via C#非常好,但我自己还没有读过。)

了解IL和CLR将在您遇到问题时帮助您。(一个泄漏的抽象?)不过,现在有了像Reflector这样优秀的反编译器,我发现自己不再经常使用ildasm了。

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

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

票数 6
EN

Stack Overflow用户

发布于 2009-02-11 19:48:38

CIL的知识可以让您在一些边缘情况下从.NET框架中获得更多

请注意,您不必能够读取raw操作码即可从此知识中获益。有关IL和程序集的通用知识,再加上Mono.Cecil.dll,可以创造奇迹:

  • How to Count Methods With NotImplementedException?
  • How to ensure that classes marked with ImmutableAttribute are Immutable indeed?
  • How to Find Extension Methods Targeting Object?
  • How to Change Namespace of .NET Assembly?

PS:对我来说,获得一些实用的IL知识的最好的源码方法是阅读一些Gendarme规则的C#代码(它类似于使用Mono.Cecil进行代码自省的FxCop )。此外,本文是一个很好的开始:Parsing the IL of a Method Body

票数 6
EN

Stack Overflow用户

发布于 2009-02-11 20:00:34

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

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

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

其他人也提到了好书,我只会投票给Serge Lidin的Expert .NET 2.0IL assembler。它有所有血淋淋的细节。如果你想要更接近C#的东西,Jeffrey Ricther通过C#的CLR是很好的选择。Jon Skeet的书很棒,但它并没有真正涵盖CIL。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/537986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档