- •Java и c# технологии прикладного програмирования
- •Java и c# технологии прикладного програмирования
- •Содержание
- •Введение
- •Лабораторная работа № 1 Коллекции c#
- •Цель работы
- •Теоретические сведения
- •Общие сведения о платформе .Net
- •Общие сведения о коллекциях c#
- •Обобщенные коллекции с#
- •Порядок выполнения лабораторной работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Получение информации о типе
- •Экземпляр типа Type
- •Получение экземпляра типа Type
- •Динамическая загрузка сборок
- •Динамическая загрузка типов
- •Исследование типа
- •Характеристики типа как целого
- •Члены класса
- •Динамическое создание объекта и вызов методов
- •Создание объекта по его типу
- •Динамический вызов методов
- •Использование интерфейсов
- •Позднее связывание
- •Динамическое приведение типов
- •Новые механизмы абстракции
- •Динамическое создание типов
- •Динамическое создание программного кода
- •Динамическое создание класса
- •Динамическое создание перечислений
- •Динамический "Hello World!"
- •Динамическое разворачивание циклов
- •Атрибуты
- •Атрибут это класс
- •Декларативное программирование
- •Код, выполняемый во время разработки
- •Использование атрибутов
- •Использование встроенных атрибутов
- •Определение и использование пользовательских атрибутов
- •Пример декларативного программирования
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связный уровень взаимодействия ado.Net
- •Несвязный уровень взаимодействия ado.Net
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связи между объектами в FluentNHibernate
- •Связь один к одному
- •Связь один ко многим
- •Связь многие ко многим
- •Способы выборки объектов в FluentNHibernate
- •Запросы NativeSql
- •Запросы по критерию
- •Запросы по образцу
- •Запросы hql
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Компиляция страниц по требованию
- •Страница asp.Net 2.0
- •Директива @Page
- •Жизненный цикл страницы
- •Новые свойства и методы объекта Page
- •Управление страницей
- •Установка выделения на элемент управления
- •Обновление данных без перезагрузки страницы
- •Отправка данных формы другой странице asp.Net
- •Шаблоны дизайна страниц
- •Создание шаблона дизайна
- •Создание страницы
- •Обработка шаблонов средой asp.Net
- •Использование разных шаблонов для разных браузеров
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Библиотеки модульного тестирования в .Net
- •Unit Testing Framework от Microsoft
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Контрольные вопросы
- •Рекомендованная литература
Получение информации о типе
Рефлексия– это получение информации о типах во время выполнения программы. Например, можно получить список всех классов и интерфейсов сборки, список элементов каждого из классов, список параметров каждого метода и т.д. вся информация берется из метаданных сборки.
Исходя из концепции унификации системы типов в 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 определяет сборку.