Что такое тип<Module>?

Я использую Mono.Cecil для чтения сборки, созданной Regex.CompileToAssembly(), Когда я перебираю типы, в корневом пространстве имен есть один тип с именем <Module>, Тип не имеет базового типа. Что это за тип? Это какой-то артефакт Mono.Cecil или что-то, что на самом деле является реальной частью сборок.NET? Какую роль это играет?

1 ответ

Решение

<Module> type является заполнителем для объявлений, которые не соответствуют модели CLI. Обычно актуально только для сборок в смешанном режиме, содержащих как код, написанный на управляемом языке, так и неуправляемый, такой как C или C++. Пусто для чисто управляемых сборок.

Эти языки поддерживают свободные функции и глобальные переменные. CLR не поддерживает это напрямую, методы и переменные всегда должны быть членами типа. Таким образом, генератор метаданных использует простой трюк, он создает фальшивый тип для размещения таких функций и переменных. Название этого поддельного типа <Module>, Он всегда имеет внутреннюю доступность, чтобы скрыть участников. Существует только один из этих типов, его RID всегда равен 1.

Исходный код CLR называет его "Глобальный класс".

Другие вопросы по тегам