русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Рефлексия (отражение) типов


Дата добавления: 2015-07-09; просмотров: 616; Нарушение авторских прав


Процесс анализа типов (структуры типов) в ходе выполнения приложения (сборки). В .NET реализуется при помощи класса System.Type и пространства имён System.Reflection.

reflection - система, предоставляющая выполняемому коду информацию о нем самом.

Пространство имён System.Reflection содержит классы и интерфейсы, которые позволяют организовать просмотр загруженных в сборку типов, методов, полей (данных-членов), и обеспечивают динамические механизмы реализации типов и вызова методов. Включает множество взаимосвязанных классов, интерфейсов, структур и делегатов, предназначенных для реализации процесса отражения. Неполный перечень классов представлен ниже:

Тип Назначение
Assembly Методы для загрузки, описания и выполнения разнообразных операций над сборкой.
AssemblyName Информация о сборке (идентификатор, версия, язык реализации).
EventInfo Информация о событиях.
FieldInfo Информация о полях.
MemberInfo Абстрактный базовый класс, определяющий общие члены для EventInfo, FieldInfo, MethodInfo, PropertyInfo.
MethodInfo Информация о методе.
Module Позволяет обратиться к модулю в многофайловой сборке.
ParameterInfo Информация о параметре.
PropertyInfo Информация о свойстве.

 

Класс System.Type содержит методы, позволяющие получать информацию о типах приложения, пространства имён System.Reflection определяет типы для организации позднего связывания и динамической загрузки типов.

Класс Type является основой для реализации функциональности System.Reflection и средством для получения доступа к метаданным.

Использование членов класса Тип, позволяет получить информацию о:

§ типе (GetType(string)),

§ конструкторах (GetConstructors()),

§ методах (GetMethods()),

§ данных-членах (GetFields()),



§ свойствах (GetProperties()),

§ событиях, объявленных в классе (GetEvents()),

§ модуле,

§ сборке, в которой реализуется данный класс.

 

Объект-представитель класса Type уникален. Две ссылки на объекты-представители класса Type оказываются эквивалентными, если только они были построены в результате обращения к одному и тому же типу.

Объект-представитель класса Type может представить любой из следующих типов:

§ Классы

§ Размерные типы

§ Массивы

§ Интерфейсы

§ Указатели

§ Перечисления

 

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

1. В результате вызова метода

 

Type Object.GetType()

 

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

2. В результате вызова статического метода-члена класса Type:

 

public static Type Type.GetType(string)

 

Параметром является строка со значением имени типа. Возвращает объект-представитель класса Type, с информацией о типе, специфицированном параметром метода.

3. От имени объекта-представителя класса Assembly - от имени объекта-сборки (самоописываемого, многократно используемого, версифицируемого БЛОКА (фрагмента) CLR-приложения) вызываются методы

 

Type[] Assembly.GetTypes()

Type Assembly.GetType(string)

 

// Получаем ссылку на сборку, содержащую объявление типа MyType,

// затем – массив объектов-представителей класса Type.

Type[] tt = (Assembly.GetAssembly(typeof(MyType))).GetTypes();

// Без комментариев.

Type[] tt = (Assembly.GetAssembly(typeof(MyType))).GetType(“MyType”);

От имени объекта-представителя класса Module (Модуль - portable executable файл с расширением .dll или .exe, состоящий из одного и более классов и интерфейсов)

Type[] Module.GetTypes()

Type Module.GetType(string)

Type[] Module.FindTypes(TypeFilter filter, object filterCriteria)

 

где TypeFilter – класс-делегат

// The TypeFilter делегаты используются to filter списка классов.

// А как этим хозяйством пользоваться - не знаю. В хелпах не нашёл.

public delegate bool TypeFilter(Type m, object filterCriteria);

 

4. В результате выполнения операции typeof(), которая применяется для построения объекта-представителя класса System.Type. Выражение, построенное на основе операции typeof, имеет следующий вид:

 

typeof(type)

 

Операнд выражения – тип, для которого может быть построен объект-представитель класса System.Type.

Пример применения операции:

 

using System;

using System.Reflection;

 

public class MyClass

{

public int intI;

public void MyMeth()

{

}

 

public static void Main()

{

Type t = typeof(MyClass);

// Альтернативная эквивалентная конструкция

// MyClass t1 = new MyClass();

// Type t = t1.GetType();

 

MethodInfo[] x = t.GetMethods();

foreach (MethodInfo m in x)

{

Console.WriteLine(m.ToString());

}

 

Console.WriteLine();

MemberInfo[] x2 = t.GetMembers();

foreach (MemberInfo m in x2)

{

Console.WriteLine(m.ToString());

}

}

}



<== предыдущая лекция | следующая лекция ==>
События и делегаты. Различия | Реализация отражения. Type, InvokeMember, BindingFlags


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.061 сек.