
- •Д. Е. Турчин
- •Лабораторный практикум
- •Кемерово 2014
- •Предисловие
- •Xslt-процессоры.
- •1.2.2. Структура и основные элементы таблицы стилей xslt. Редакторы xslt Структура таблицы стилей xslt. Шаблоны преобразования.
- •Принятие решений и сортировка данных.
- •Выбор методов вывода. Связывание xml-документа с таблицей стилей xslt.
- •Работа с xslt в ms Visual Studio. Отладчик xslt.
- •1.2.3. Работа с xslt на платформе .Net Framework. Класс XmlCompiledTransform Работа с xslt на платформе .Net Framework. Класс XmlCompiledTransform.
- •1.3. Порядок выполнения работы
- •1.4. Контрольные вопросы
- •2.2.2. Понятие события. Объявление и обработка событий. Стандартные обработчики событий Понятие события. Объявление и обработка событий.
- •Стандартные обработчики событий в .Net Framework.
- •2.3. Порядок выполнения работы
- •2.4. Контрольные вопросы
- •3. Работа с интерфейсами в приложениях на языке c#
- •3.1. Цель и задачи работы
- •3.2. Основные теоретические сведения
- •3.2.1. Объявление и реализация интерфейсов Объявление интерфейса в c#. Сравнение интерфейсов и абстрактных классов.
- •Реализация интерфейса. Интерфейсные свойства и индексаторы.
- •Интерфейсы на диаграммах uml. Интерфейсы и отношение реализации.
- •3.2.2. Стандартные интерфейсы .Net Framework. Интерфейсы iComparable, iEnumerable и iEnumertor Стандартные интерфейсы .Net Framework. Интерфейс iComparable.
- •Интерфейсы iEnumerable и iEnumerator. Итераторы
- •Операции is и as.
- •3.3. Порядок выполнения работы
- •3.4. Контрольные вопросы
- •4. Основы работы с шаблонами grasp в приложениях на языке c#
- •4.1. Цель и задачи работы
- •4.2. Основные теоретические сведения
- •4.2.1. Проектирование классов на основе обязанностей. Основные шаблоны grasp Проектирование классов на основе обязанностей.
- •Шаблоны Information Expert и Creator.
- •Шаблоны Low Coupling и High Cohesion.
- •4.2.2. Работа с uml-моделями в Visual Studio Создание проектов моделирования в Visual Studio.
- •Разработка uml-схем классов.
- •Создание кода из uml-схем классов.
- •4.3. Порядок выполнения работы
- •4.4. Контрольные вопросы
- •5. Работа со структурными шаблонами GoF в приложениях на языке c#
- •5.1. Цель и задачи работы
- •5.2. Основные теоретические сведения
- •5.2.1. Понятие и виды структурных шаблонов GoF. Шаблон Адаптер Понятие и виды структурных шаблонов GoF. Шаблон Адаптер.
- •Реализация шаблона Адаптер на языке c#.
- •5.2.2. Шаблон Фасад Шаблон Фасад.
- •Реализация шаблона Фасад на языке c#.
- •5.3. Порядок выполнения работы
- •5.4. Контрольные вопросы
- •6. Работа с поведенческими шаблонами GoF на языке c#
- •6.1. Цель и задачи работы
- •6.2. Основные теоретические сведения
- •6.2.2. Поведенческие шаблоны проектирования. Диаграммы конечных автоматов. Шаблон Состояние Поведенческие шаблоны проектирования. Диаграммы конечных автоматов uml.
- •Шаблон Состояние.
- •6.2.1. Шаблоны Стратегия и Шаблонный метод Шаблон Стратегия.
- •Шаблонный метод.
- •6.3. Порядок выполнения работы
- •Операции запросов linq.
- •7.2.2. Анонимные типы. Расширяющие методы Анонимные типы. Расширяющие методы.
- •7.2.3. Понятие лямбда-выражения. Использование лямбда-выражений в запросах linq Понятие лямбда-выражения. Деревья выражений.
- •Применение лямбда-выражений в запросах linq.
- •7.3. Порядок выполнения работы
- •7.4. Контрольные вопросы
- •8.2.2. Осевые методы linq to xml. Модификация xml-документов с помощью linq to xml Осевые методы linq to xml. Использование xPath.
- •8.3. Порядок выполнения работы
- •8.4. Контрольные вопросы
- •9. Основы создания приложений wpf с использованием языка xaml
- •9.1. Цель и задачи работы
- •9.2. Основные теоретические сведения
- •9.2.1. Назначение и возможности wpf. Создание приложений wpf в Visual Studio
- •9.2.2. Особенности языка разметки xaml. Основные элементы xaml. Свойства и события в xaml
- •9.2.3. Основные элементы управления wpf. Размещение элементов управления. Панель Grid
- •9.2.4. Страничная навигация в приложениях wpf
- •9.3. Порядок выполнения работы
- •9.4. Контрольные вопросы
- •10. Основы привязки и форматирования данных в приложениях wpf
- •10.1. Цель и задачи работы
- •10.2. Основные теоретические сведения
- •10.2.1. Привязка данных wpf. Основные поставщики данных Общие сведения о привязке данных wpf.
- •10.2.2. Шаблоны данных Шаблоны данных.
- •10.3. Порядок выполнения работы
- •10.4. Контрольные вопросы
- •Список литературы Печатные издания.
- •Интернет-ресурсы.
- •Приложение п.1. Пример разработки xml-документа
- •П.2. Некоторые физические формулы и константы
2.2.2. Понятие события. Объявление и обработка событий. Стандартные обработчики событий Понятие события. Объявление и обработка событий.
Важным средством языка C# являются события.
Событие представляет собой автоматическое уведомление от объекта о том, что произошло некоторое действие. Содержательно событием является некоторое специальное состояние, в котором может оказаться объект.
Рис. 2.2. Результат работы программы
Класс, экземпляры которого включают событие, называют классом-отправителем (издателем) сообщения (sender). Класс, чьи экземпляры получают сообщения, называют классом-получателем (подписчиком) сообщения (receiver).
Определённый объект должен вызывать событие. Остальные объекты будут подписываться на это событие и реагировать на его возникновение. После возникновения события все подписанные на него объекты получают уведомления и могут совершать различные действия.
Результатом оповещения объектов о событии должен быть запуск определённого кода, который называют обработчиком событий (англ. event handler).
События работают по следующему принципу: объекты, которые должны реагировать на событие, регистрирует обработчик этого события. Когда событие происходит, то вызываются все зарегистрированные обработчики этого события.
В языке C# каждое событие определяется делегатом, описывающим сигнатуру сообщения.
События являются элементами класса и объявляются с помощью ключевого слова event. Синтаксис объявления события имеет следующий вид:
[модификаторы] event [тип_события] имя_события; |
Тип события – это тип делегата, на котором основано событие, а имя события – конкретный экземпляр объявляемого события.
Создание события состоит из следующих этапов:
Объявление делегата – функционального класса, задающего сигнатуру. Для некоторых событий можно использовать стандартные делегаты. В этом случае достаточно только знать их имена.
Объявление события в классе sender как экземпляра соответствующего делегата. При этом добавляется ключевое слово event.
Объявление методов, инициирующих событие.
Пример объявления делегата и события, соответствующего типу этого делегата, а также обработчика события представлен в листинге 2.5.
Листинг 2.5. Пример объявления делегата, события и обработчика |
// Тип делегата для события public delegate void MyDelegate();
// Класс, содержащий событие public class ClassWithEvent { // Событие public event MyDelegate MyEvent; // Метод, запускающий событие public void OnMyEvent() { if (MyEvent != null) MyEvent(); } }
// Класс, подписанный на событие class Program { // Обработчик события static void Handler() { Console.WriteLine("Произошло событие!"); }
static void Main(string[] args) { ClassWithEvent evt = new ClassWithEvent(); // Добавить обработчик Handler() в список MyEvent evt.MyEvent += Handler; // Запустить событие evt.OnMyEvent(); } } |
❒ Пример 2.2. Разработка консольного приложения, содержащего класс, который поддерживает событие.
В консольном приложении на языке C# требуется разработать класс «телефон» (Phone), в котором задано событие «звонок по телефону» (Phone_Call). В классе Program консольного приложения должен присутствовать метод-обработчик события (Handler).
Событие Phone_Call должно наступать случайным образом с заданной вероятностью p. Кроме того, должна учитываться вероятность q того, что на телефонный звонок не будет ответа.
Для создания события CallEvent объявим тип делегата void CallDelegate(int a, int b), который задаёт сигнатуру метода-обработчика с двумя целочисленными параметрами. При вызове и обработке события CallEvent такими параметрами будут являться время вызова и длительность разговора по телефону.
Объявление делегата CallDelegate, а также исходный код класса Phone представлены в листингах 2.6 и 2.7.
Листинг 2.6. Объявление делегата CallDelegate и исходный код класса Phone (часть 1) |
|
Листинг 2.7. Исходный код класса Phone (часть 2) |
|
Обработчик события CallEvent создадим в классе Program консольного приложения.
Исходный код класса Program представлен в листинге 2.8.
Листинг 2.8. Исходный код класса Program консольного приложения |
|
Результат работы консольного приложения показан на рис. 2.3. ❒
Рис. 2.3. Результат работы консольного приложения