前面分析了加载类和基类的基本过程,
接着来分析一下加载成员变量和方法的数量。
因为我们知道C#语言定义一个类,主要就是定义成员变量,以及那些对此成员变量进行操作的方法,
所以需要使用一种方法来描述C#语言定义类的能力。
一般情况下,主要有两种类型:
普通的类,比如前面定义的class MonoEmbed类。
还有一种通用类,也就是泛型类型,例如,.NET 类型 System.Collections.Generic.List<T> 具有一个类型参数,它按照惯例被命名为 T。
所以在mono就定义两种保存的类型:
MonoClassDef和MonoClassGtd。
MonoClassDef是用来保存普通的类,MonoClassGtd是保存泛型类型。
struct _MonoClassDef {
MonoClass klass;
guint32 flags;
/*
* From the TypeDef table
*/
guint32 first_method_idx;
guint32 first_field_idx;
guint32 method_count, field_count;
/* next element in the class_cache hash