Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

Исходя из концепции унификации системы типов в C# каждый тип(в том числе и простой) в среде.NET связан со специальным объектом-типом. Класс Type пространства имен System играет ключевую роль в системе работы с метаданными. Любая деятельность по извлечению и использованию информации о типе связана с применением этого класса.

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

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

Экземпляр типа Type

Экземпляр типа Type может быть представлен любым из следующих типов:

- классы;

- размерные типы (Value types);

- массивы;

- интерфейсы;

- указатели;

- индексаторы (нумераторы).

Ссылка на объект Type, ассоциируемый с типом, может быть получена одним из следующих способов:

- метод Object.GetType возвращает объект Type, представляющий тип заданного экземпляра объекта;

- статический метод GetType возвращает объект Type, который представляет тип, указанный посредством своего полного имени;

- методы Module. GetTypes, Module. GetType, и Module. FindTypes возвращают объект Type, который представляет типы, определенные в модуле. Метод GetTypes позволяет получить массив объектов для всех общедоступных и защищенных типов, определенных в модуле;

- метод FindInterfaces возвращает отфильтрованный список интерфейсов типов, которые поддерживаются данным типом;

- метод GetElementType возвращает объект Type, который представляет элемент;

- методы GetInterfaces и GetInterface возвращают объект Type, который представляет интерфейс, поддерживаемый типом;

- метод GetTypeArray возвращает массив объектов Type, которые представляют типы, заданные посредством набора объектов;

- методы GetTypeFromProgID и GetTypeFromCLSID возвращают объект Type, который указывается через ProgID или CLSID (методы предоставляются для совместимости с СОМ);

- метод GetTypeFromHandle возвращает объект Type, который указывается посредством дескриптора (метод предоставляется для совместимости);

- оператор typeof получает объект Type для указанного типа.

Метаданные - это информация о выполнимом модуле, получаемая во время выполнения приложения. К такой информации относятся и данные о типе. В случае неправильного указания имени типа возникает исключение. Поэтому указание типа следует заключать в блок try - catch.

Например:

 

try

{

Type tp = Type.GetType(s); //тип объекта s

Console.WriteLine("Имя типа: {0}",tp.FullName);

}

catch (System.NullReferenceException)

{

Console.WriteLine("Ошибка задания типа");

}

 

Класс Type предоставляет большой набор свойств для запроса информации по типу, включая следующие:

- FullName - возвращает имя типа;

- IsClass - определяет, является ли тип классом;

- IsAbstract - определяет, является ли тип абстрактным классом;

- IsNestedPublic - определяет, является ли тип вложенным и общедоступным;

- IsPublic - определяет, является ли данный тип общедоступным;

- IsNotPublic - определяет, является ли данный тип защищенным;

- IsSealed - определяет, является ли тип конечным (не может быть базовым классом);

- IsArray - определяет, представляет ли указанный тип массив;

- GUID - возвращает значение типа GUID, ассоциированное с данным типом (такое значение хранится в реестре Windows).

- IsNestedAssembly - определяет, является ли тип вложенным и видимым только в своей собственной сборке;

- Module - возвращает модуль (DLL) в котором объявлен данный тип;

- Namespace - возвращает пространство имен, содержащее данный тип;

- Свойство IsByRef позволяет определить, передается ли указанный элемент по типу, а свойство Assembly определяет сборку.





Поделиться с друзьями:


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 370 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

4438 - | 4129 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.