Язык программирования C#9 и платформа .NET5
Маркер
служит для установления имени заданного типа, которым в рассматриваемом случае является специальное перечислениеTypDefName. Маркер метаданныхCarLibrary.EngineStateEnumприменяется при документировании базового типа для заданного типа .NET Core (ссылаемого типаExtendsв этом случае). Каждое поле перечисления помечается с использованием маркераSystem.Enum. Ради краткости выше была приведена только часть метаданных.Field #nНа заметку! Хотя это выглядит как опечатка, в
отсутствует буква "TypDefName", которую можно было бы ожидать.еПросмотр (частичных) метаданных для типа Car
Ниже показана часть метаданных класса
, которая иллюстрирует следующие аспекты:Car• как поля определяются в терминах метаданных .NET Core;
• как методы документируются посредством метаданных .NET Core;
• как автоматическое свойство представляется в метаданных .NET Core.
// TypeDef #1// -------------------------------------------------------// TypDefName: CarLibrary.Car// Flags : [Public] [AutoLayout] [Class] [Abstract] [AnsiClass] [BeforeFieldInit]// Extends : [TypeRef] System.Object// Field #1// -------------------------------------------------------// Field Name: <PetName>k__BackingField// Flags : [Private]// CallCnvntn: [FIELD]// Field type: String...Method #1-------------------------------------------------------MethodName: get_PetNameFlags : [Public] [HideBySig] [ReuseSlot] [SpecialName]RVA : 0x000020d0ImplFlags : [IL] [Managed]CallCnvntn: [DEFAULT]hasThisReturnType: StringNo arguments....// Method #2// -------------------------------------------------------// MethodName: set_PetName// Flags : [Public] [HideBySig] [ReuseSlot] [SpecialName]// RVA : 0x00002058// 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метаданных .NET Core.GetterИсследование блока TypeRef
Вспомните, что метаданные сборки будут описывать не только набор внутренних типов (
,Carи т.д.), но также любые внешние типы, на которые ссылаются внутренние типы. Например, с учетом того, что в сборкеEnginestateEnumопределены два перечисления, метаданные типаCarLibrary.dllбудут содержать следующий блокSystem.Enum:TypeRef// TypeRef #19// -------------------------------------------------------// Token: 0x01000013// ResolutionScope: 0x23000001// TypeRefName: System.EnumДокументирование определяемой сборки
В файле
также присутствуют метаданные .NET Core, которые описывают саму сборку с использованием маркераCarLibrary.il. Ниже представлена часть метаданных манифеста сборкиAssembly:CarLibrary.dll// Assembly