Mono里运行C#脚本35—加载C#语言基类的过程
前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点,
然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。
但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性,
比如类的继承,类的方法的多态,类的虚拟方法,还有类的成员变量等等。
接着下来,将要一点一点地探索Mono怎么样实现相关的语言属性。
在前面的例子反汇编里,有下面两行语句:
.class private auto ansi beforefieldinit MonoEmbed
extends [mscorlib]System.Object
当Mono解析IL代码到这两行时,是怎么样处理的呢?
先拿到一堆属性,并且是一个类型定义,它的名称是MonoEmbed,并且获取扩展的属性,以及继承的基类名称。
由于MonoEmbed类是一个定义程序入口点的类,并没有生成对象的过程,
所以它不会生成对象的过程。
因此这个类会有特殊的处理,这个类的定义是由入口点函数来带动类定义的过程的。
所以这个类的处理过程是先从入口点出发。
mono_jit_exec