Анализ метаданных перечня EngineState

Анализ метаданных перечня EngineState

Каждый тип, определенный в компоновочном блоке, обозначен маркером "TypeDef #n" (где TypeDef – это сокращение от type definition, что в переводе означает определение типа). Если описываемый тип использует тип, определённый в рамках другого компоновочного блока .NET, то для ссылки на такой тип используется "TypeRef #n" (где TypeRef – это сокращение от type reference, в переводе ссылка на тип). Если хотите, TypeRef можно считать указателем на полное определение метаданных соответствующего типа. По существу, метаданные .NET представляют собой множество таблиц, явно описывающих все определения типов (TypeDef) и все типы, на которые имеются ссылки (TypeRef). Все это можно увидеть в окне просмотра метаданных ildasm.exe.

В случае CarLibrary.dll одно из описаний TypeDef в метаданных соответствуeт перечню CarLibrary.EngineState (у вac номер TypeDef может быть другим: нумерация TypeDef соответствует порядку, в котором компилятор C# обрабатывает соответствующие типы).

TypeDef #1

-------------------------------------------------------------

 TypDefName: CarLibrary.EngineState (020000002)

 Flags: [Public] [AutoLayout] [Class] [Sealed] [AnsiClass] (00000101)

 Extends: 01000001 [TypeRef] System.Enum

 Field #2

 -------------------------------------------------------------

 Field Маше: engineAlive (04000002)

 Flags: [Public] [Static] [Literal] [HasDefault] (00008056)

 DefltValue: (I4) 0

 CallCnvntn: [FIELD]

 Field type: ValueClass CarLibrary.EngineState

Метка TypDefName используется для имени типа. Метка метаданных Extends используется для указания базового класса данного типа .NET (в данном случае это тип System.Enum, обозначенный как TypeRef). Каждое поле перечня обозначено меткой "Field #n". Для примера здесь представлены только метаданные поля EngineState.engineAlive.