透过IL看C# 开篇

透过IL看C#
开篇

摘要:这是一个系列文章,介绍了C#中各种语言结构被编译器翻译为IL之后的样子,并从IL的角度分析其中的原理。

缘起

  老刘是.NET技术实打实的拥趸。但追逐.NET技术这么多年来,很累。计算机技术,尤其是微软技术,瞬息万变,欲逐之而力不足,于是老刘决定往底层走一走。

  如果对.NET技术有一定的了解,就会发现自.NET 2.0以来,尽管Framework和语言以及其他应用层领域(如WF、WCF、WPF和Silverlight等)技术日新月异,但其底层——用什么词表示好呢?姑且以IL蔽之吧——却是非常稳定的,基本没什么变化。

  最近推出的Visual Studio 2010 CTP更加体现了这一点,尽管C#语言发生了巨大的变化(提供了更强的与动态语言交互的能力)、Framework也要有巨大的更新,但依然没听说要对IL做什么改动。所以,学习IL可能要比学习那些应用层技术更加轻松一些,虽然难度会更大,但我可以慢慢地学,细细地品味。

  老刘不是吃独食的人,既然学习,就要和大家分享。老刘不仅分享学到的东西,还希望和大家分享学习的过程,这其中的酸甜苦辣。

  本来打算写一些类似于IL教程的东西,但最终放弃了。在今年的MVP Open Day上,和Anytao还有TerryLee聊起了这个想法,我们一致认为这样的文章没有什么意义。是啊,有那么方便的开发工具、那么强大的语言,谁会去用IL写程序呢?更多的人是去看IL,通过IL深入理解一些更高层的技术和概念。

  最终Anytao建议道,可以写一些C#语言结构所对应的IL。这个小建议给老刘带来了无限灵感,也诱发了这个系列的形成。在此小感谢一下!

简介

  透过IL看C#,这个IL是什么呢?简单来说,就是ILAsm语言。

  那么ILAsm语言又是什么呢?如果你简单地认为这是一门汇编语言或编程语言,那就大错特错了。可以认为ILAsm是“.NET元数据映射语言”,也就是说,ILAsm披着编程语言的外衣,几乎映射了一个托管程序集中所有的内容——包括程序集清单、元数据、IL指令甚至托管资源,乃至PE映像的种种属性。

  这一系列文章,就是简单地罗列了各种C#文法结构对应的IL代码。

谁应该阅读这个系列

  老刘写这个系列,纯粹就是凭兴趣。如果你和老刘情绪相投,那么这些小文对你来说再合适不过了。

  如果你打算写个类似于.NET Reflector那样的反编译器,那么除了对反射和IL语言相当熟悉之外,一定要深入了解各种C#文法构造所对应的IL指令序列模式。这种对应关系只能来源于大量的观察和积累。有的时候,同样的文法结构,只是因为上下文的些许变化,就会生成截然不同的IL指令序列。这系列文章虽然不能涉及所有这些对应关系,但相信能给你带来一些灵感。

  另外——请首先降低你的标准和期望值——这一系列文章是非常简单的,仅仅是罗列了各种C#文法结构对应的IL代码。如果你有足够兴趣和时间,完全可以自己做这些事。但如果你只是对IL有点兴致,不想花太多时间做过多的研究,那么这些文章还真能带你一起过把瘾。

注,老刘写作一向是走意识流,第一篇写下了第二篇不知道啥时候能出来,也不知道写几篇就另寻他欢了。所以,千万不要特别期待。

在这借用韩寒一句话——你可以骂我,也可以不看,但别催我。

目录

posted @ 2008-11-03 22:36  Anders Liu  阅读(6529)  评论(26编辑  收藏  举报