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

We use cookies. Read the Privacy and Cookie Policy

Анализ метаданных типа 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) описываются аналогично.