Прежде всего, метаданные класса Car
(System.Object) и включают разнообразные флаги, которые описывают то, как тип был сконструирован (например, [Public], [Abstract] и т.п.). Описания методов (вроде конструктора Car) содержат имя, возвращаемое значение и параметры.Обратите внимание, что автоматическое свойство дает в результате сгенерированное компилятором закрытое поддерживающее поле (по имени
get_PetName() и set_PetName(). Наконец, само свойство отображается на внутренние методы получения/установки с применением маркеров Setter и Getter метаданных .NET Core.Исследование блока TypeRef
Вспомните, что метаданные сборки будут описывать не только набор внутренних типов (Car
EnginestateEnum и т.д.), но также любые внешние типы, на которые ссылаются внутренние типы. Например, с учетом того, что в сборке CarLibrary.dll определены два перечисления, метаданные типа System.Enum будут содержать следующий блок TypeRef:// TypeRef #19
// -------------------------------------------------------
// Token: 0x01000013
// ResolutionScope: 0x23000001
// TypeRefName: System.Enum
Документирование определяемой сборки
В файле CarLibrary.il
Assembly. Ниже представлена часть метаданных манифеста сборки CarLibrary.dll:// Assembly
// -------------------------------------------------------
// Token: 0x20000001
// Name : CarLibrary
// Public Key :
// Hash Algorithm : 0x00008004
// Version: 1.0.0.1
// Major Version: 0x00000001
// Minor Version: 0x00000000
// Build Number: 0x00000000
// Revision Number: 0x00000001
// Locale:
// Flags : [none] (00000000)
Документирование ссылаемых сборок
В дополнение к маркеру Assembly
TypeDef и TypeRef в метаданных .NET Core также применяются маркеры AssemblyRef #n для документирования каждой внешней сборки. С учетом того, что каждая сборка .NET Core ссылается на библиотеку базовых классов System.Runtime, вы обнаружите AssemblyRef для сборки System.Runtime, как показано в следующем фрагменте:// AssemblyRef #1 (23000001)
// -------------------------------------------------------
// Token: 0x23000001
// Public Key or Token: b0 3f 5f 7f 11 d5 0a 3a
// Name: System.Runtime
// Version: 5.0.0.0
// Major Version: 0x00000005
// Minor Version: 0x00000000
// Build Number: 0x00000000
// Revision Number: 0x00000000
// Locale:
// HashValue Blob:
// Flags: [none] (00000000)
Документирование строковых литералов
Последний полезный аспект, относящийся к метаданным .NET Core, связан с тем, что все строковые литералы в кодовой базе документируются внутри маркера User Strings
// User Strings
// -------------------------------------------------------
// 70000001 : (23) L"CarLibrary Version 2.0!"
// 70000031 : (13) L"Quiet time..."
// 7000004d : (11) L"Jamming {0}"
// 70000065 : (32) L"Eek! Your engine block exploded!"
// 700000a7 : (34) L"Ramming speed! Faster is better..."