Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_answers (1).docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.9 Mб
Скачать

3. Метаданные в .Net исчерпывающи.

Метаданные содержат подробнейшую информацию о каждом типе: его имя, типы и имена его полей, описание свойств и методов со всеми их параметрами и возвращаемыми значениями. Здесь же хранится информация о доступности (видимости) всех членов класса и об их атрибутах. Метаданные хранят не только информацию об интерфейсе экспортируемых классов. Такие детали реализации, как структура защищённых полей, описания защищённых методов и других компонентов, также могут быть извлечены из метаданных.

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

4. Метаданные в .Net расширяемы.

Технология .Net позволяет не только использовать предопределённые виды метаданных, но также позволяет расширять их. С помощью специальных, определяемых пользователем (программистом), атрибутов можно предоставить информацию по любому элементу программы, можно снабдить элементы программы дополнительной информацией.

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

5. Метаданные в .Net конструируемы программно.

.Net позволяет создавать новые сборки во время исполнения программы, наполнять эти сборки новыми классами, реализовывать код методов этих классов.

Имеются два способа динамического создания сборок, содержащих метаданные. Первый генерирует бинарный промежуточный код (MSIL), используя классы, лежащие в пространстве имен System.Reflection.Emit. Второй способ выдает результат в виде исходного кода на одном из поддерживаемых .Net Framework языков высокого уровня (C#, VB, ...), используя классы из пространства имен System.CodeDom.

Прежде чем продолжить рассказ о метаданных в среде .Net, можно оглянуться по сторонам и констатировать, что механизмы рефлексии, основанные на метаданных, разработаны и давно с успехом применяются в разных системах программирования.

1. RTTI (runtime type identification) в языке С++.

Механизм, встроенный в язык С++. Метаданные основаны на указателях на таблицы виртуальных методов и потому работают только с полиморфными типами. RTTI позволяет выяснять родственные отношения между типами и производить безопасные нисходящие приведения типов. Как правило, имеется возможность опционального использования RTTI. Сам факт применения данного средства в языке C++ вызывает бурные споры.

2. CRuntimeClass в библиотеке MFC.

Независимый от RTTI механизм. Метаданные хранятся как статические данные классов и обеспечивают возможность динамического создания экземпляров класса и сериализации.

3. Механизм Reflection в языке Java.

Глубоко встроенный в язык механизм. Механизм используется в реализации самих языковых конструкций. Имеются возможности исследования структуры типов во время исполнения, динамического создания объектов и вызова методов.

4. IDL – язык описания интерфейсов (Interface Definition Language)

5. Библиотеки типов (Type Libraries) в технологии программирования COM.

6. WSDL – язык описания Web-служб (Web Services Description Language). WSDL представляет собой стандарт XML-документов, предназначенный для описания возможностей Web-службы, включая формат принимаемых и передаваемых сообщений, имена и типы методов и функций, реализуемых службой, а также используемые протоколы обмена данными.

Получение информации о типе

Каждый тип в среде .Net связан со специальным объектом (объектом-типом). Класс Type играет ключевую роль в системе работы с метаданными. Любая деятельность по извлечению и использованию информации о типе связана с применением этого класса. Экземпляр класса Type позволяет получить полную информацию о типе: информацию о его методах, свойствах, вложенных типах, информацию о сборке и модуле, содержащих данный тип, полное имя типа и многое другое.

Более того, с его помощью можно динамически создавать экземпляры описываемого им типа (класса), а также исполнять методы и работать со свойствами полученного объекта.

Поэтому работа с типом начинается с получения соответствующего экземпляра класса Type.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]