Шрифт:
// ImplFlags : [IL] [Managed]
// CallCnvntn: [DEFAULT]
// hasThis
// ReturnType: Void
// 1 Arguments
// Argument #1: String
// 1 Parameters
// (1) ParamToken : Name : value flags: [none]
...
// Property #1
// -------------------------------------------------------
// Prop.Name : PetName
// Flags : [none]
// CallCnvntn: [PROPERTY]
// hasThis
// ReturnType: String
// No arguments.
// DefltValue:
// Setter : set_PetName
// Getter : get_PetName
// 0 Others
...
Прежде всего, метаданные класса
Car
указывают базовый класс этого типа (System.Object
) и включают разнообразные флаги, которые описывают то, как тип был сконструирован (например, [Public]
, [Abstract]
и т.п.). Описания методов (вроде конструктора Car
) содержат имя, возвращаемое значение и параметры. Обратите внимание, что автоматическое свойство дает в результате сгенерированное компилятором закрытое поддерживающее поле (по имени
<PetName>k_BackingField
) и два сгенерированных компилятором метода (в случае свойства для чтения и записи) с именами 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
также присутствуют метаданные .NET Core, которые описывают саму сборку с использованием маркера 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: <null>
// 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