Jump to content

Метаданные (CLI)

Метаданные CLI, представление на диске
Расширение имени файла
.exe, .dll, .winmd
Магическое число 0x424A5342
Разработано Майкрософт ,
Экма Интернэшнл
Стандартный ECMA-335 часть II

Метаданные в Common Language Infrastructure (CLI) относятся к определенным структурам данных, встроенным в код Common Intermediate Language (CIL), который описывает высокоуровневую структуру кода. Метаданные описывают все классы и члены классов, определенные в сборке, а также классы и члены классов , которые текущая сборка будет вызывать из другой сборки. Метаданные метода содержат полное описание метода, включая класс (и сборку, содержащую класс), тип возвращаемого значения метода и все параметры .

Компилятор языка CLI , сгенерирует метаданные и сохранит их в сборке содержащей CIL . Когда среда выполнения выполняет CIL, она проверяет, совпадают ли метаданные вызываемого метода с метаданными, хранящимися в вызывающем методе. Это гарантирует, что метод можно вызвать только с правильным количеством параметров и с правильными типами параметров.

Платформа приложений среды выполнения Windows , присутствующая в Windows 8 и Windows Phone 8 , использует формат метаданных CLI для описания компонентов интерфейсов для кода, написанного на любом из поддерживаемых языков программирования . Разница в использовании среды Common Language Runtime заключается в том, что сборка обычно не содержит никаких инструкций CIL. [1]

Атрибуты

[ редактировать ]

Разработчики могут добавлять метаданные в свой код через атрибуты . Существует два типа атрибутов: пользовательские и псевдопользовательские атрибуты, и для разработчика они имеют одинаковый синтаксис . Атрибуты в коде — это сообщения компилятору о необходимости создания метаданных. В CIL метаданные, такие как модификаторы наследования, модификаторы области действия и почти все, что не является кодами операций или потоками, также называются атрибутами.

Пользовательский атрибут — это обычный класс , наследуемый от Attribute сорт. Пользовательский атрибут можно использовать для любого метода, свойства, класса или всей сборки с помощью синтаксиса: [AttributeName(optional parameter, optional name=value pairs)] как в:

[Custom]
[Custom(1)]
[Custom(1, Comment="yes")]

Пользовательские атрибуты широко используются CLI. Windows Communication Framework использует атрибуты для определения контрактов служб, ASP.NET использует их для предоставления методов в виде веб-служб , LINQ to SQL использует их для определения сопоставления классов с базовой реляционной схемой , Visual Studio использует их для группировки свойств объекта. разработчик класса указывает категорию класса объекта, применяя [Category] пользовательский атрибут. Пользовательские атрибуты интерпретируются кодом приложения, а не CLR. Когда компилятор видит пользовательский атрибут, он генерирует пользовательские метаданные, которые не распознаются CLR. Разработчик должен предоставить код для чтения метаданных и действий на их основе. Например, атрибут, показанный в примере, может обрабатываться кодом:

class CustomAttribute : Attribute
{
   private int paramNumber = 0;
   private string comment = "";

   public CustomAttribute() { }
   public CustomAttribute(int num) { paramNumber = num; }

   public String Comment
   {
      set { comment = value; }
   }
}

Имя класса сопоставляется с именем атрибута. Компилятор Visual C# автоматически добавляет строку " Attribute" в конце любого имени атрибута. Следовательно, каждое имя класса атрибута должно заканчиваться этой строкой, но разрешено определять атрибут без Attribute-суффикс. Прикрепляя атрибут к элементу, компилятор будет искать как буквальное имя, так и имя с Attribute добавлено в конец, т.е. е. если бы ты написал [Custom] компилятор будет искать оба Custom и CustomAttribute. Если оба существуют, компилятор терпит неудачу. Атрибут может иметь префикс " @" если вы не хотите рисковать двусмысленностью, поэтому напишите [@Custom] не будет соответствовать CustomAttribute. Использование атрибута вызывает конструктор класса. Поддерживаются перегруженные конструкторы. Пары имя-значение сопоставляются со свойствами, имя обозначает имя свойства, а предоставленное значение задается свойством.

Иногда возникает неясность относительно того, к чему вы прикрепляете атрибут. Рассмотрим следующий код:

[Orange]
public int ExampleMethod(string input)
{
    //method body goes here
}

Что отмечено оранжевым? Это ExampleMethod, его возвращаемое значение или, возможно, всю сборку? В этом случае компилятор будет использовать значение по умолчанию и рассматривать атрибут как прикрепленный к методу. Если это не то, что было задумано, или если автор желает уточнить свой код, целевой атрибут можно указать . Письмо [return: Orange] будет отмечать возвращаемое значение оранжевым цветом, [assembly: Orange] отметит всю сборку. Действительные цели: assembly, field, event, method, module, param, property, return и type.

Псевдопользовательский атрибут используется так же, как и обычные пользовательские атрибуты, но у него нет специального обработчика; скорее, компилятор внутренне осведомлен об атрибутах и ​​по-разному обрабатывает код, отмеченный такими атрибутами. Атрибуты, такие как Serializable и Obsolete реализуются как псевдонастраиваемые атрибуты. никогда не должен использовать псевдопользовательские атрибуты ILAsm , поскольку он имеет адекватный синтаксис для описания метаданных. [ нужны разъяснения ]

Хранение метаданных

[ редактировать ]

Сборки содержат таблицы метаданных. Эти таблицы описаны спецификацией CIL. Таблицы метаданных будут содержать ноль или более записей, а положение записи определяет ее индекс. Когда код CIL использует метаданные, он делает это через токен метаданных. Это 32- битное значение, в котором верхние 8 бит идентифицируют соответствующую таблицу метаданных, а оставшиеся 24 бита задают индекс метаданных в таблице. Framework SDK содержит образец под названием metainfo который будет перечислять таблицы метаданных в сборке, однако эта информация редко пригодится разработчику. Метаданные в сборке можно просмотреть с помощью инструмента ILDASM, входящего в состав пакета SDK для .NET Framework .

В стандарте CIL метаданные определяются в форме ILAsm (язык ассемблера), форме представления на диске для хранения и форме, встроенной в сборки формата переносимого исполняемого файла (PE, .exe или .dll). Форма PE основана на форме на диске.

Отражение

[ редактировать ]

Отражение — это API, используемый для чтения метаданных CLI. API отражения обеспечивает логическое представление метаданных, а не буквальное представление, предоставляемое такими инструментами, как метаинформация. Отражение в версии 1.1 платформы .NET можно использовать для проверки описаний классов и их членов, а также для вызова методов. Однако он не обеспечивает доступ к CIL для метода во время выполнения. Версия 2.0 платформы позволяет получить CIL для метода.

Другие инструменты метаданных

[ редактировать ]

Помимо System.Reflection пространства имен, доступны и другие инструменты, которые можно использовать для обработки метаданных. Microsoft .NET Framework включает в себя библиотеку манипулирования метаданными CLR, реализованную в машинном коде . сторонние инструменты для получения метаданных и управления ими, включая PostSharp и Mono Cecil Также можно использовать .

См. также

[ редактировать ]
  1. ^ «Файлы метаданных Windows (WinMD)» . Приложения UWP для Windows .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7c8207b6983fce87bcd9b2f85b82d5e3__1619946660
URL1:https://arc.ask3.ru/arc/aa/7c/e3/7c8207b6983fce87bcd9b2f85b82d5e3.html
Заголовок, (Title) документа по адресу, URL1:
Metadata (CLI) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)