新年问候
大家新年好,在新的一年中,本Blog的重点将转向IL系列,所以这里先写一篇前言,明确各个目标。
基础知识
IL之旅的难度将会比较高,当然包含入门的部分,不过,前提是读者已经相当了解c#和反射的使用,所以在系列中不会说那些基础的反射,和如何反射等基础知识。
目标
学习IL的唯一目标就是高效的执行那些原来因为灵活性而不得不使用反射来执行的代码,寻求一种既灵活又高效的解决方案。当然现在有不少替代的方案,其中包括Lambda表达式树,但是这些方案也存在某些缺陷(例如3.5的Lambda表达式树不支持循环,当然在4.0中做了加强,但是依然不允许使用unsafe的部分)
主角
本系列中的重点角色是DynamicMethod,这个类型是提供轻量级代码生成的核心,当然也会讲到一些生成Assembly的使用,和一些必须要生成Assembly的情况。
难度
本系列的难度将分为初级和进阶两部分:
- 初级部分需要将只需要基础够扎实和必要的工具(reflector),难度相对较低
- 进阶部分对IL的拼装是无法通过工具获得的,需要足够的IL知识,因此难度较高
PS:IL其实仅仅比c#难一点点,只是需要关心装箱和拆箱,语义是堆栈式的,还对一些c#没有支持的功能,其他基本和c#类似,当然别忘了还需要了解c#编辑器做了些什么事情(例如:foreach语句)。
参考书目
本系列建议阅读一下资料作为必要的知识补充:
ECMA334(c#规范文档,用于了解c#编辑器做了些什么事情),ECMA335(CLI规范文档,用于了解CLI的结构和各方面的基础知识),Inside Microsoft Net IL Assembly Language(ms官方说IL的书)
PS:不需要全看明白,要是全看明白了,就直接逃过本系列吧