
- •1. Сборщик мусора и управление ресурсами
- •2. Жизненный цикл объектов
- •3. Неуправляемый код и указатели
- •4. Строки и строковый пул
- •5. Обобщенные типы, ограничения в параметрах обобщенных типов, типы допускающие null значение
- •6. Тип Type и пространство System.Reflection
- •7. Создание объектов с помощью рефлексии, вызов методов объектов средствами рефлексии
- •8. Атрибуты, жизненный цикл объекта атрибута
- •9. Специальные атрибуты net.Framework и ограничения пользовательских атрибутов
- •10. Метаданные сборок, структура сборок, домены приложений
- •11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки
- •12. Класс Thread, логические и физические потоки выполнения, жизненный цикл потока выполнения
- •13. Класс монитора, конструкция lock()
- •14. Атомарная синхронизация и класс Interlocked
- •15. Класс ReaderWriterLock, пул потоков
- •16. Классы WaitHandle и производные от него: ManualResetEvent, AutoResetEvent, Mutex
- •17. Высокоуровневые средства распараллеливания задач, класс Task
- •18. Свойства и методы класса Task
- •19. Делегаты, цепочка вызова
- •Групповая адресация
- •20. Асинхронный вызов с помощью объекта делегата
- •IAsyncResult
- •21. События, обратный вызов, типовая схема реализации события
- •22. Лямбда-выражения, замыкание лямбда-выражений
- •23. Деревья выражений, типы деревьев. Создание деревьев выражений
- •24. Технология ado.Net, архитектура, модель с постоянным соединением и с рассоединением
- •Linq to DataSet
- •Linq to sql
- •Платформа ado.Net Entity Framework
- •Службы wcf Data Services
- •25)Понятие поставщика данных и его составные части в ado.Net. Класс соединения, итератора, команды.
- •26. Технология объектно-реляционного связывания, персистентные объекты, на примере одной из технологии (Linq to sql, Linq to Entities, nHibernate)
- •Entity Framework
- •27. Linq to Objects: архитектура технологии и возможности, понятие итератора, создание Linq запросов
- •28. Средства распараллеливания выполнения запросов plinq.
- •29. Основы wcf. Основные понятия, применение. Контракты данных, привязки. Архитектура сервис-ориентированных систем.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •30. Структура проекта с использованием wcf сервисов. Интерфейсы сервиса, атрибуты для обозначения методов сервиса и контрактов данных.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •31. Методы и свойства прокси-объекта на стороне клиента.
- •32. Развертывание wcf сервисов.
6. Тип Type и пространство System.Reflection
Пространства имен System.Reflection содержат типы, обеспечивающие управляемое представление загруженных типов, методов и полей и позволяющие динамически создавать и вызывать типы. Дочернее пространство имен содержит типы, позволяющие компилятору или другому средству создавать метаданные или код на языке MSIL.
Пространство имен System.Reflection содержит типы, предназначенные для извлечения сведений о сборках, модулях, членах, параметрах и других объектах в управляемом коде путем обработки их метаданных. Эти типы также можно использовать для работы с экземплярами загруженных типов, например для подключения событий или вызова методов.
Класс Type является корневым классом для функциональных возможностей пространства имен System.Reflection и основным способом доступа к метаданным. С помощью членов класса Type можно получить сведения об объявленных в типе элементах: конструкторах, методах, полях, свойствах и событиях класса, а также о модуле и сборке, в которых развернут данный класс.
Объект Type возвращает оператор языка C# typeof (оператор GetType в Visual Basic, оператор typeid в Visual C++).
Представляющий тип объект Type уникален; это означает, что две ссылки на объект Type указывают на один и тот же объект тогда и только тогда, когда они представляют один и тот же тип. Это позволяет сравнивать объекты Type по равенству ссылок.
Данный класс является потокобезопасным; несколько потоков могут одновременно считывать данные из экземпляра этого типа. Экземпляр класса Type может представлять типы для следующих объектов:
Классы
типы значений;
Массивы
Интерфейсы
Указатели
Перечисления
сконструированных универсальных типов и определений универсальных типов,
аргументов типов и параметров типов сконструированных универсальных методов, определений универсальных типов и определений универсальных методов.
Ссылку на объект Type, связанный с определенным типом, можно получить одним из следующих способов.
Метод Object.GetType возвращает объект Type, представляющий тип экземпляра.
и др.
Примеры
В следующем примере кода показано несколько типичных функций класса Type. Оператор языка C# typeof (оператор GetType в Visual Basic, оператор typeid в Visual C++) используется для извлечения объекта Type, представляющего тип String. В этом объекте Type метод GetMethod используется для получения объекта MethodInfo, представляющего перегрузку Substring, которая принимает значения, соответствующие начальному расположению и длине.
Type t = typeof(String);
MethodInfo substr = t.GetMethod("Substring", new Type[] { typeof(int), typeof(int) });
Object result = substr.Invoke("Hello, World!", new Object[] { 7, 5 });
Console.WriteLine("{0} returned: {1}.", substr, result);
7. Создание объектов с помощью рефлексии, вызов методов объектов средствами рефлексии
Создание объектов
Конструкторы конкретного типа получаются при вызове метода GetConstructors() для объекта класса Type. Ниже приведена одна из наиболее часто используемых форм этого метода:
ConstructorInfо[] GetConstructors()
ConstructorInfо[] GetConstructors(BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic | … )
Метод GetConstructors() возвращает массив объектов класса ConstructorInfо, описывающих конструкторы. Класс ConstructorInfo является производным от абстрактного класса MethodBase, который в свою очередь наследует от класса MemberInfo. В нем также определен ряд собственных методов. К их числу относится интересующий нас метод GetConstructors(), возвращающий список параметров, связанных с конструктором. Этот метод действует таким же образом, как и упоминавшийся ранее метод GetParameters(), определенный в классе MethodInfo.
Как только будет обнаружен подходящий конструктор, для создания объекта вызывается метод Invoke(), определенный в классе ConstructorInfo. Ниже приведена одна из форм этого метода:
object Invoke(object[] parameters)
Вызов методов
Type t = typeof(String);
MethodInfo substr = t.GetMethod("Substring", new Type[] { typeof(int), typeof(int) });
Object result = substr.Invoke("Hello!", new Object[] { 7, 5 });
Console.WriteLine("{0} returned: {1}.", substr, result);