什么是“<Module>”类型?

What is the "<Module>" type?

我正在使用 Mono.Cecil 读取由 Regex.CompileToAssembly() 生成的程序集。当我遍历这些类型时,在根命名空间中有一种名为 <Module> 的类型。该类型没有基类型。这是什么类型?这是一些 Mono.Cecil 工件还是实际上是 .NET 程序集的真实部分的东西?它有什么作用?

<Module> 类型是不适合 CLI 模型的声明的占位符。通常仅与混合模式的程序集相关,其中包含以托管语言编写的代码以及非托管语言(如 C 或 C++)编写的代码。对于纯托管程序集它是空的。

这些语言支持自由函数和全局变量。 CLR 不直接支持,方法和变量必须始终是类型的成员。所以元数据生成器使用了一个简单的技巧,它创建了一个假类型作为这些函数和变量的家。该假类型的名称是 <Module>。它始终具有 内部 可访问性来隐藏成员。这些类型中只有一种,它的 RID 总是 1。

CLR 源代码将其称为 "Global Class"。