- •1. Жизненный цикл объекта.
- •2.Делегаты. Назначение, синтаксис объявления, использование делегата. Событийная модель.
- •3. События. Объявление события. Шаблон проектирования события в классе. Свойство для безопасной работы с событиями. Безопасный вызов события в многопоточном программировании.
- •4. Обобщенные классы. Объявление и детализация класса типами пользователя.
- •5. Обобщенные методы. Объявление и детализация методов типами пользователя.
- •6. Ограничения на параметры в обобщенных классах и функциях.
- •7. Типы, допускающие значение null
- •8. Коллекции и итераторы. Оператор yield
- •9.Потоки ввода/вывода в c#. Создание объекта потока и работа с ним. Текстовые, бинарные потоки, потоки со сжатием данных.
- •11. Исключения. Создание класса пользовательского исключения. Генерация и перехват исключения.
- •12. Рефлексия типов. Класс типа Type. Методы и свойства класса.
- •13. Сборки. Статическое и динамическое связывание сборок. Класс сборки Assembly.
- •14. Позднее связывание. Класс System.Activator. Создание экземпляра объекта путем позднего связывания. Вызов методов объекта путем позднего связывания.
- •15. Атрибуты. Назначение атрибутов. Базовый класс атрибута. Аннотирование класса атрибутами.
- •16. Расширяющие методы.
- •17. Анонимные методы. Объявление и использование.
- •18. Захват переменных анонимными методами. Цепочка вызовов.
- •20. Захват переменных в лямбда-выражениях. Рекурсивный вызов в лямбда-выражениях. Анонимная рекурсия.
- •21. Выражения и деревья выражений. Стандартные делегаты, используемые с выражениями и деревьями выражений.
- •22. Комбинирование выражений посредством класса InvocatedExpression.
- •23. Язык интегрированных запросов linq. Назначение, технические средства для реализации языка. Группы языка linq.
- •24. Linq to Objects. Вид запроса. Вызов цепочек расширяющих методов. Языковые конструкции для кодирования запроса. Отложенное и неотложенное выполнение запроса.
- •25. Конструкция from…select… Разделы конструкции. Условия. Проекция. Анонимные типы данных.
- •26. Конструкция from…group… Разделы конструкции. Условия. Ключи группировки. Получение ключа в результате-выборке.
- •28. Linq to Objects. Расширяющие методы для преобразования типов, операций со множествами, преобразования в один элемент.
- •29. Технология linq to sql. Назначение технологии. Класс контекста данных и основные атрибуты для создания контекста данных.
- •30. Создание и подключение класса контекста данных к базе данных. Шаблон программирования при добавлении данных в объект контекста данных.
22. Комбинирование выражений посредством класса InvocatedExpression.
В пространстве имен System.Linq.Expressions, отвечающем за деревья выражений, имеются следующие классы. Классы разделяются на абстрактные и обычные: 1) Expression (абстрактный) – верхушка иерархии. Он содержит в себе множество статических методов для производства выражений различных типов. 2) ParameterExpression – объекты класса содержат параметр для последующей подстановки. 3) BinaryExpression – соответствует бинарным операциям. 4) UnaryExpression – соответствует унарным операциям. 5)ConstantExpression – соответствует константе. 6)Expression <TDelegate> - соответствует строго типизированное дерево выражений. 7)InvocationExpression – позволяет применять лямбда-выражения к списку деревьев выражений. Этот класс играет решающую роль, когда нужно скомбинировать 2 или более деревьев выражений.
Синтаксис класса InvocationExpression:
public sealed class InvocationExpression : Expression
Некоторые свойства класса InvocationExpression:
1) Arguments - получает аргументы, к которым применяется делегат или лямбда-выражение.
2) CanReduce - Указывает, что узел можно сократить до более простого. Если возвращается значение true, для получения сокращенной формы можно вызвать Reduce().
3) Expression - получает делегат или лямбда-выражение для применения.
Некоторые методы класса InvocationExpression:
1) Reduce - сокращает данный узел до более простого выражения. Если CanReduce возвращает значение true, данный метод должен вернуть допустимое выражение. Данный метод может вернуть другой узел, который нужно будет уменьшать еще раз.
2) ReduceAndCheck - сокращает данный узел до более простого выражения. Если CanReduce возвращает значение true, данный метод должен вернуть допустимое выражение. Данный метод может вернуть другой узел, который нужно будет уменьшать еще раз.
3) ReduceExtensions - сокращает выражение до известного типа узла (не являющегося узлом Extension) или возвращает выражение, если оно имеет известный тип.
4) Update - создает новое выражение, идентичное данному, но использующее предоставленные дочерние элементы. Если все дочерние элементы идентичны, возвращается данное выражение.
5) Expression.Invoke() - создает выражение InvocationExpression. Имеет 2 перегрузки:
1. Invoke(Expression, IEnumerable(Of Expression));
2. Invoke(Expression, Expression[ ]).
23. Язык интегрированных запросов linq. Назначение, технические средства для реализации языка. Группы языка linq.
LINQ - новая технология для доступа к данным из различных источников. LINQ запросы возвращают набор подходящих объектов. Этот набор называется последовательностью.
Большинство последовательностей в LINQ имеет тип IEnumerable<T> - где T – тип данных объектов в последовательности.
В рамках LINQ различают следующие разделы:
LINQ to Objects – название для IEnumerable<T> API для стандартных операций запросов; применяется к различным объектам (списки, карты, массивы); стандартные операции запросов – это статические методы класса System.Linq.Enumerablе.
LINQ to XML – название присвоенное интерфейсу LINQ API для работы с XML; применяется к XML-документам; чтобы воспользоваться нужна ссылка на сборку System.Xml.Linq.dll и директива using следующего вида: using System.Xml.Linq;
LINQ to DataSet- интерфейс LINQ API для DataSet;
LINQ to SQL - название, присвоенное IQueryable <T>, позволяющий запросам работать с базой данных Microsoft SQL Server; чтобы воспользоваться нужна ссылка на сборку System.Data.Linq.dll и директива using следующего вида: using System.Data.Linq;
LINQ to Entittes - альтернативный интерфейс LINQ API для обращения к базе данных; он отделяет сущностную объектную модель от физической базы данных.
LINQ основана на расширяющих методах и λ-выражениях. Для удобства в язык введено несколько синтаксических конструкций, которые аналогичны SQL-запросам. В отличие от SQL запросы в LINQ строго типизированы. Например, простейший LINQ-запрос, который выбирает из массива все четные числа.
int [] mas = new int []{2,3,6,8,1};
var res = from x in mas where x%2 == 0 select x;
foreach (var x in res)
{ Console.WriteLine(x);}
Вместо LINQ запроса: var res = from x in mas where x%2 ==0 select x; можно записать: var res = mas.where (x => x%2 == 0);
Каждый запрос начинается с ключевого слова from. Оно определяет переменную диапазона, т.е. локальную переменную для каждого элемента коллекции. Потом in и указывается коллекция. Можно указывать 2 локальных переменных: from x in arr1 from y in arr2. Для каждого х каждый у. Коллекцию должен реализовывать интерфейс IEnumerable. <>
Используются также конструкции:
Where <условие отбора> - для нее указывается предикат - любое логическое выражение.
Join – для присоединения другой таблицы
Orderby - для группировки
Select – проектор (который генерирует конечный результат) <выражение для проектора>, оно транслируется в λ-выражение.
Group – группировка.
Let – вводит внутреннюю переменную, для того, чтобы избавится от повторений выражений в LINQ запросе.