Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

 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.

Анализ метаданных типа Car

Вот часть дампа типа Car, которая иллюстрирует следующее:

• способ определения полей в терминах метаданных .NET;

• представление методов в метаданных .NET;

• отображение свойства типа в пару специальных членов-функций.

TypeDef #3

– ------------------------------------------------------------

 TypDefName: CarLibrary.Car (02000004)

 Flags: [Public] [AutoLayout] [Class] [Abstract] [AnsiClass] (00100081)

 Extends: 01000002 [TypeRef] System.Object

 Field #1

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

Field Name: petName (04000008)

Flags: [Family] (00000004)

CallCnvntn: [FIELD]

Field type: String

…

 Method #1

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

MethodName:.ctor (06000001)

Flags: [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor] (00001886)

RVA: 0x00002050

ImplFlags: [IL] [Managed] (00000000)

CallCnvntn: [DEFAULT]

hasThis

ReturnType: Void

No arguments.

…

 Property #1

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

Prop.Name: PetName (17000001)

Flags: [none] (00000000)

CallCnvntn: [PROPERTY]

hasThis

ReturnType: String

No arguments.

DefltValue:

Setter: (06000004) set_PetName

Getter: (06000003) get_PetName

0 Others

…

Прежде всего, отметьте то, что метаданные класса Car указывают базовый класс типа и включают различные флаги, использовавшиеся конструктором типа при его создании (такие как [public], [abstract] и т.п.). Методы (например, конструктор класса Car) описаны с учетом их имени, параметров и возвращаемого значения. Наконец, обратите внимание на то, что свойства представляются внутренними методами get_ /set_ с использованием меток Setter/Getter метаданных .NET. Как и следует ожидать, производные типы Car (это SportsCar и MiniVan) описываются аналогично.

Анализ TypeRef

Напомним, что метаданные компоновочного блока описывают не только множество внутренних типов (Car, EngineState и т.д.), но и внешние типы, на которые ссылается данный компоновочный блок. Например, поскольку CarLibrary.dll Определяет два перечня, в описании присутствует блок TypeRef для типа System.Enum.

TypeRef #1 (01000001)

– ------------------------------------------------------------

Token: 0x01000001

ResolutionScope: 0x23000001

TypeRefName: System.Enum

 MemberRef #1

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

 Member: (0a00000f) ToString:

 CallCnvntn: [DEFAULT] hasThis

 ReturnType: String

 No arguments.

Представление метаданных компоновочного блока

  • Читать дальше
  • 1
  • ...
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: