8_Делегаты и события
Урок 8 : Делегаты и события
О чём этот урок
Делегаты и события позволяют строить слабосвязанные системы с подписками. Практика включает таймер, фильтрацию через предикаты и систему логирования.
Теория
Вопросы для самопроверки
- Что такое делегат в C#?
- В чём разница между обычным вызовом метода и вызовом через делегат?
- Что такое сигнатура метода и как она связана с делегатами?
- Что такое анонимный метод и как он связан с делегатом?
- Какие 3 типа делегата по умолчанию предоставляет .NET?
- Что такое событие (
event) в C# и чем оно отличается от обычного делегата-поля? - Какова стандартная сигнатура обработчика событий в .NET? Что такое
EventArgs? - Что делает оператор
?.при вызове событияMyEvent?.Invoke(...)?
Практика
Как выполнять задания
Откройте файл Lesson8.cs для выполнения заданий. Результат выводить в строку консоли.
Задания
Задание 1.
Создайте класс Timer с событиями:
public event EventHandler Tick- срабатывает каждую секунду;public event EventHandler Finished- срабатывает по истечении заданного времени.
Класс должен иметь:- метод
Start(int seconds)- запускает таймер; - приватный метод
OnTick()- вызывает событиеTick; - приватный метод
OnFinished()- вызывает событиеFinished.
Создайте экземпляр таймера, подпишитесь на оба события. Запустите таймер на 5 секунд.
Задание 2.
Создайте список List<int> с числами от 1 до 20.
Создайте три метода, возвращающих bool и принимающих int:
IsEven(int number)-true, если число чётное;IsOdd(int number)-true, если число нечётное;IsGreaterThanTen(int number)-true, если число > 10.
Привяжите к этим методам предикаты (Predicate<int>).
Создайте методFilterNumbers, который принимает:List<int> numbersPredicate<int> filter
Метод возвращает новый список с отфильтрованными числами. Отфильтруйте список тремя разными способами и выведите каждый результат.
Задание 3.
** Создайте систему логирования:
Структура LogMessage:
DateTime Time- время создания;LogLevel Level- уровень (Info,Warning,Error);string Message- текст сообщения;string Source- источник сообщения.*
КлассLogger:- событие
public event Action<LogMessage> LogMessageReceived; - методы логирования:
Info(),Warning(),Error(); - защищённый метод
OnLogMessageReceived()для вызова события.
Задание 4.
Создайте класс ConsoleLogger для обработки и вывода логов в консоль:
- разный цвет текста для разных уровней;
- формат вывода:
[Время] [Уровень]: Сообщение.
Сделайте примеры использования логгера.