我正在使用Mono.Cecil来读取由Regex.CompileToAssembly()
生成的程序集。当我遍历类型时,根名称空间中有一个名为<Module>
的类型。该类型没有基本类型。这是什么类型的?这是一些Mono.Cecil工件还是实际上是.NET程序集的一部分?它起什么作用?
答案 0 :(得分:8)
<Module>
类型是不适合CLI模型的声明的占位符。通常仅在混合模式的程序集中相关,包含用托管语言编写的代码以及像C或C ++这样的非托管代码。对于纯托管程序集,它是空的。
这些语言支持自由函数和全局变量。 CLR不直接支持,方法和变量必须始终是类型的成员。因此元数据生成器使用一个简单的技巧,它创建一个假类型作为这些函数和变量的家。该假类型的名称是<Module>
。它总是具有内部可访问性来隐藏成员。只有这些类型中的一种,其RID始终为1.
CLR源代码将其称为“全局类”。