Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 132

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 126 127 128 129 130 131 < 132 > 133 134 135 136 137 138 .. 320 >> Следующая

316 Глава 7 Рефлексия типов и программирование с использованием атрибутов
Класс Туре
Большая часть возможностей, которые дает пространство имен System.Refaction, связана с применением абстрактного типа System. Туре. Этот класс содержит значительное количество методов, которые могут быть использованы для получения
информации о типах в нашей программе. Полный список всех членов занял бы
очень много места, поэтому в табл. 7.1 мы приводим перечень лишь наиболее важных свойств и методов этого класса.
Таблица 7.1. Члены класса Туре
Член
Назначение
IsAbstract IsArray Isdass IsCOMObject IsEnum Islnterface IsPnmrtive IsNestedPublic IsNestedPrivate IsSealed IsValueType
GetConstructorsO GetEvents() GetFieldsO GetlnterfacesO GetMethodsO GetMembersO GetNestedTypesO GetProperties()
FindMembers()
GetType() Invoke Mem be r()
Эти свойства (как и многие другие) позволяют определить основные характеристики конфетного типа в программе (например, является ли он абстрактным, является ли он массивом, является ли он классом и т. п.)
Эти методы (и аналогичные им) возвращают массив с набором интересующих пользователя элементов (конструкторами, событиями, полями и т. п.). Каждый метод возвращает массив соответствующих типов, например, GetFields() возвращает массив типов Fieldlnfo; GetMethodsQ — массив типов Methodinfo и т. д. Для каждого из этих методов есть парный ему (например, GetMethod() вместо GetMethods(), GetProperty() вместо GetPropertiesO) для работы только с одним элементом вместо массива со всеми элементами. Например, передав методу GetMethod() имя конкретного метода, можно получить о нем информацию
Возвращает массив типов Meniberlnfo основываясь на заданных критериях поиска
Этот метод возвращает объект типа Туре по строковому имени
Этот метод используется для позднего связывания указанного элемента
Получение объекта класса Туре
Получить объект класса Туре можно самыми разными способами. Однако при этом воспользоваться стандартным подходом — создать объект класса Туре напрямую
модуле, а также всех членов каждого из типов — всех методов, полей, свойств и событий. Мы можем прямо в процессе работы программы получить перечень всех интерфейсов, поддерживаемых классом или структурой, параметры методов и прочую информацию, важную для объектно-ориентированного программирования.
Главные элементы, которые необходимы для использования возможностей рефлексии в наших 11 |н">г|)п\імах — это класс Туре из пространства имен System и типы пространства имен Syst sr.. Reflect i on. Класс System. Type содержит большое количество методов, которые можно использовать для получения ценной информации о самых разных типах. Пространство имен Systeir.Ref.SCtIor определяет типы для организации позднего связывания и динамической загрузки сборок. Вначале речь пойдет о System.Туре.
Класс Type 317
при помощи ключевого слова new мы не сможем. Причина проста: System.Туре -это абстрактный класс.
Первый способ получения объекта класса 'уреприменить метод GetTypev >, определенный в классе System.Object (как мы помним, все остальные типы С# являются производными от этого класса):
//Получаев обыект класса Туре из имеющегося обьекта класса Foo Foo theFoo - new Foo О: Type t = theFoo.GetTypeO;
Второй способ использовать статический метод GetTypeO, определенный в самом классе System. Туре. Этому методу нужно будет передать текстовое имя того типа, который нас интересует:
// Получаем Объект класса Туре, используя статический метод GetTypeO
//из самого класса Туре
Type t - null;
t = Type.GetTypeC'Foo");
Третий способ — использовать ключевое слово typeof:
// Получаем обьект класса Туре при помощи клгкмеэого слова typeof Type t - typeof(Foo);
Обратите внимание, что при использовании Type. Get Туре () и typeof нет ік-обхп димости создавать объект типа для того, чтобы получить информацию об этом типе,
А теперь, после того как мы создали объект класса Туре, посмотрим, что это нам дает,
Возможности класса Туре
Проиллюстрируем возможности на примере класса определение
которого приведено ниже (реализации методов в этом примере могут быть любыми):
// Мы смомеи получить разнообразную информации об этом классе во время выполнения namespace TheType
{
// Два интерфейса
public interface IFaceOne
{ void MethodAO; }
public interface IFaceTwo { void MethodBO:.}
// Класс Foo поддерживает эти два интерфейса
public class Foo: IFaceOne, IFaceTwo
{
II Поля
public int mylntField: public string myStringField:
// Метод
public void myMethoddnt pi. string p2) {...}
// Свойство
public int MyProp
318 Глава 7 • Рефлексия типов и программирование с использованием атрибутов
get { return mylntField: } set { mylntField = value: }
}
I! Методы интерфейсов IFaceOne и IFaceTwo public void MethodAO {...} public void MethodBO (,.,}
I
}
А теперь мы определим класс ¦ — программу, которая сможет получать во время выполнения информацию о классе Foo — его методах, свойствах, поддерживаемых интерфейсах и полях (и кое-что еще). В классе FooReader определено несколько статических методов, которые очень похожи друг на друга. Первым идет метод Li stMethods С), который позволяет получить информацию о всех методах класса Foo при помощи объекта System. Туре. Обратите внимание, что Type. Li stMethods () возвращает массив типов Methodinfo:
Предыдущая << 1 .. 126 127 128 129 130 131 < 132 > 133 134 135 136 137 138 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100