Українська
Підсумки
Висновки
Делегати дозволяють зберігати посилання на методи й передавати поведінку як параметр. Групові делегати викликають кілька методів у порядку додавання, повертаючи результат останнього. Вбудовані делегати Action, Func, Predicate<T> і Comparison<T> покривають більшість сигнатур, а лямбда-вирази дають змогу записати функцію безпосередньо в місці використання. Лямбди захоплюють змінні, утворюючи замикання, що продовжують час життя змінних; у циклі for це може призвести до помилок. Функції вищого порядку будують нові функції з наявних. Події реалізують шаблон «видавець – підписник»: ключове слово event дозволяє ззовні лише підписуватися та відписуватися, а стандартний шаблон EventHandler<TEventArgs> з методом OnНазваПодії робить події єдиними в усій платформі .NET. Незняті підписки можуть спричиняти витоки пам’яті.
Питання для самоперевірки
- Що таке делегат? Як оголосити тип делегата?
- Коли метод сумісний з делегатом?
- Як безпечно викликати делегат, що може мати значення
null? - Що таке груповий делегат? Який результат повертає його виклик?
- Чим відрізняються
Action,Func,Predicate<T>іComparison<T>? - Який синтаксис мають лямбда-вирази та лямбда-блоки?
- Що таке природний тип лямбди?
- Для чого використовують
static-лямбди? - Що таке замикання? Як довго живе захоплена змінна?
- У чому полягає пастка захоплення змінної циклу
for? - Що таке функція вищого порядку? Наведіть приклади.
- Чим подія відрізняється від відкритого поля-делегата?
- Опишіть стандартний шаблон подій .NET.
- Чому незняті підписки можуть спричиняти витоки пам’яті?
- Чому відписка повторно записаною лямбдою не працює?
Корисні посилання
- Делегати: https://learn.microsoft.com/dotnet/csharp/delegates-overview
- Лямбда-вирази: https://learn.microsoft.com/dotnet/csharp/language-reference/operators/lambda-expressions
- Події: https://learn.microsoft.com/dotnet/csharp/events-overview
- Обробка й генерування подій: https://learn.microsoft.com/dotnet/standard/events/
- Делегати й події: відмінності: https://learn.microsoft.com/dotnet/csharp/distinguish-delegates-events
EventHandler<TEventArgs>: https://learn.microsoft.com/dotnet/api/system.eventhandler-1