Роль метаданных типов .NET
Роль метаданных типов .NET
Кроме CIL-инструкций, компоновочный блок .NET содержит исчерпывающие и точные метаданные, описывающие все его типы (классы, структуры, перечни и т.д.), определенные в бинарном объекте, и все члены каждого типа (свойства, методы, события и т.д.). К счастью, задача создания метаданных всегда возлагается на компилятор (а не на программиста). По причине того, что метаданные .NET так подробны и точны, компоновочные блоки оказываются единицами, способными себя полностью описать, – настолько полно, что для бинарных .NET-объектов не возникает необходимости регистрироваться в реестре системы.
Для иллюстрации формата метаданных типов .NET давайте рассмотрим метаданные, сгенерированные для метода Add() C#-класса Calc, представленного выше (метаданные, генерируемые для VB .NET-версии метода Add(), оказываются аналогичными).
TypeDef #2 (02000003)
-----------------------------------------------------------
TypDefName: CalculatorExample.Calc (02000003)
Flags: [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldlnit] (00100001)
Extends: 01000001 [TypeRef] System.Object
Method #1 (06000003)
-----------------------------------------------------------
MethodName: Add (06000003)
Flags: [Public] [HideBySig] [ReuseSlot] (00000086)
RVA: 0x00002090
ImplFlags: [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: I4
2 Arguments
Argument #1: I4
Argument #2: I4
2 Parameters
(1) ParamToken: (08000001) Name: x flags: [none] (00000000)
(2) ParamToken: (08000002) Name: у flags: [none] (00000000)
Метаданные используются средой выполнения .NET, а также различными средствами разработки. Например, возможность IntelliSense, предлагаемая в Visual Studio 2005 в режиме проектирования, основана на чтении метаданных компоновочного блока. Метаданные используются различными утилитами просмотра объектов, инструментами отладки и самим компилятором C#. Для полноты картины заметим также, что использование метаданных лежит в основе множества .NET-технологий, включая удаленный доступ, отображение типов, динамическое связывание, Web-сервисы XML и сериализацию объектов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Просмотр метаданных типов
Просмотр метаданных типов Если вы захотите просмотреть метаданные типов для загруженного в настоящий момент компоновочного блока, просто нажмите ‹Ctrl+M›. На рис. 1.8 показаны метаданные для метода Calc.Add(). Рис. 1.8. Просмотр метаданных типов с помощью
Просмотр метаданных компоновочных блоков
Просмотр метаданных компоновочных блоков Наконец, если вы захотите просмотреть содержимое манифеста компоновочного блока, то вам нужно двойным щелчком открыть пиктограмму MANIFEST (рис. 1.9). Рис. 1.9. Двойной щелчок на этой строке покажет манифест компоновочного блокаНе
Роль конструкторов
Роль конструкторов До сих пор объекты HelloClass строились с помощью конструктора, заданного по умолчанию, который, по определению, не имеет аргументов. Каждый класс C# автоматически снабжается типовым конструктором, который вы можете при необходимости переопределить. Этот
Анализ метаданных типов
Анализ метаданных типов Наконец, если вы сейчас нажмете комбинацию клавиш ‹Ctrl+M›, ildasm.exe отобразит метаданные для каждого из типов, имеющихся в компоновочном блоке CarLibrary.dll (рис. 11.8). Рис. 11.8. Метаданные для типов на CarLibrary.dllТеперь, после того как мы с вами заглянули внутрь
Анализ метаданных перечня EngineState
Анализ метаданных перечня EngineState Каждый тип, определенный в компоновочном блоке, обозначен маркером "TypeDef #n" (где TypeDef – это сокращение от type definition, что в переводе означает определение типа). Если описываемый тип использует тип, определённый в рамках другого компоновочного
Анализ метаданных типа Car
Анализ метаданных типа Car Вот часть дампа типа Car, которая иллюстрирует следующее:• способ определения полей в терминах метаданных .NET;• представление методов в метаданных .NET;• отображение свойства типа в пару специальных членов-функций. TypeDef
Представление метаданных компоновочного блока
Представление метаданных компоновочного блока Окно метаданных ildasm.exe позволяет также просмотреть метаданные самого компоновочного блока, для обозначения которых используется метка Assembly. Следующий фрагмент листинга показывает, что информация, представленная в таблице
Создание пользовательского приложения для просмотра метаданных
Создание пользовательского приложения для просмотра метаданных Чтобы очертить общие контуры процесса отображения (а также привести пример использования System.Type), мы создадим консольное приложение, которое назовем MyTypeViewer. Эта программа будет отображать подробную
Роль HTTP
Роль HTTP Web-приложения очень сильно отличаются от традиционных приложений для настольных систем. Первым очевидным отличием является то, что любое реальное Web-приложение предполагает использование, как минимум, двух соединенных в сеть, машин (конечно, при разработке
Роль HTML
Роль HTML Сконфигурировав каталог для своего Web-приложения, вы должны создать и его содержимое. Напомним, что Web-приложение - это просто термин используемый для обозначения множества файлов, обеспечивающих функционирование узла, Значительная часть этих файлов будет
Роль папки Bin
Роль папки Bin Позже вы увидите, что Web-страницы ASP.NET в конечном счете компилируются в компоновочный блок .NET. Поэтому не должно быть неожиданностью то, что Web-узлы могут ссылаться на любое число приватных или общедоступных компоновочных блоков, В ASP.NET 2.0 метод указания
Извлечение метаданных
Извлечение метаданных В командной строке вы можете использовать режим -extract для вывода операторов DDL, которые определяют метаданные в базе данных.Все зарезервированные слова и объекты извлекаются в файл в виде символов в верхнем регистре, если только локальный язык не
Копирование только метаданных
Копирование только метаданных Копирование только метаданных обычно требуется для создания "пустой" базы данных, когда вы готовы поставлять систему пользователям, загружать данные или восстанавливать базу с целью миграции. Следующая команда выполняет копирование
Роль развернутых типов
Роль развернутых типов Почему нам нужны развернутые типы? Они играют три важные роли: [x]. улучшают эффективность; [x]. обеспечивают лучшее моделирование; [x]. поддерживают базисные типы в унифицированной ОО-системе типов. Первое применение наиболее очевидно: без развернутых