Метаданные и компоненты с самоописанием

В прошлом программный компонент (EXE или DLL), написанный на одном языке, не мог просто так использовать программный компонент, написанный на другом языке. Модель COM стала шагом вперед в решении этой проблемы. Платформа .NET Framework упрощает взаимодействие компонентов, позволяя компиляторам добавлять дополнительные описательные данные во все модули и сборки. Эти данные, называемые метаданными, способствуют эффективному взаимодействию компонентов.

Метаданные — это данные в двоичном формате с описанием программы, хранящиеся либо в переносимом исполняемом (PE) файле среды CLR, либо в памяти. Когда код компилируется в PE-файл, метаданные помещаются в одну часть файла, а код преобразуется в MSIL и помещается в другую часть файла. В метаданных описываются все типы и члены, определенные или используемые в модуле или сборке. При исполнении кода среда выполнения загружает метаданные в память и обращается к ним для получения сведений о классах, членах, наследовании и других элементах кода..

В метаданных в независимом от языка виде описываются все типы и члены, определенные в коде. В метаданных хранятся следующие сведения.

  • Описание сборки.

    • Удостоверение (имя, версия, язык и региональные параметры, открытый ключ).

    • Экспортируемые типы.

    • Другие сборки, от которых зависит данная сборка.

    • Необходимые разрешения безопасности.

  • Описание типов.

    • Имя, видимость, базовый класс и реализованные интерфейсы.

    • Члены (методы, поля, свойства, события, вложенные типы).

  • Атрибуты.

    • Дополнительные описательные элементы, изменяющие типы и члены.

Преимущества метаданных

Метаданные — это ключ к более простой модели программирования; они устраняют необходимость в файлах IDL, файлах заголовков или каких-либо внешних методах ссылки на компоненты. Метаданные позволяют языкам платформы .NET Framework автоматически описывать себя не зависящим от языка образом незаметно для разработчика и пользователя. К тому же метаданные имеют возможности для расширения за счет использование атрибутов. Метаданные обеспечивают также следующие преимущества.

  • Файлы с самоописанием.

    Модули среды CLR и сборки обладают свойством самоописания. Метаданные модуля содержат все необходимое для взаимодействия с другим модулем. Метаданные автоматически предоставляют функциональные возможности IDL для модели СОМ, в связи с чем один и тот же файл может использоваться и для определения, и для реализации. Модули и сборки среды выполнения даже не требуют регистрации в операционной системе. Благодаря этому описания, используемые средой выполнения, всегда отражают фактический код в скомпилированном файле, что повышает надежность приложения.

  • Взаимодействие языков и упрощение разработки на основе компонентов

    Метаданные содержат полные сведения о скомпилированном коде, необходимые для наследования класса из PE-файла, написанного на другом языке. Можно создать экземпляр класса, написанного на любом другом управляемом языке (это может быть любой язык, обращающийся к среде CLR), не беспокоясь о явной упаковке или настройке кода взаимодействия.

  • Атрибуты.

    Платформа .NET Framework позволяет объявлять особые виды метаданных, называемые атрибутами, в скомпилированном файле. Атрибуты находятся в .NET Framework и используются для более детального контроля над работой программы во время ее выполнения. Также с помощью атрибутов в файлы .NET Framework можно вносить пользовательские метаданные, определяемые самим пользователем. Дополнительные сведения см. в разделе Расширение метаданных с помощью атрибутов.

Связанные разделы

Заголовок

Описание

Метаданные и структура PE-файла

Описание раздельного хранения метаданных и кода MSIL в PE-файле.

Использование метаданных во время выполнения

Демонстрация использования метаданных во время выполнения на примере кода.

Расширение метаданных с помощью атрибутов

Описание способов применения атрибутов, написания настраиваемых атрибутов и извлечения данных, хранящихся в атрибутах.