Події повідомляють іншим об'єктам про зміни
- Інтерфейс користувача - подія миш над кнопкою, миш натиснута
- Серверні програми - щоб позбутися обслуговуючих процесів
- Ігри - керувати багатьма об'єктами
- Action
- Func
public delegate void EventDelegate(); // клас делегат public class A { public event EventDelegate myEvent = null; // подія (⚡) public void InvokeEvent() { myEvent.Invoke(); } } class Program { static void Handler1() { Console.WriteLine("1"); } static void Handler2() { Console.WriteLine("2"); } static void Main(string[] args) { A obj = new A(); obj.myEvent += new EventDelegate(Handler1); // підписати obj.myEvent += Handler2; obj.InvokeEvent(); Console.WriteLine("-----"); obj.myEvent -= new EventDelegate(Handler2); obj.InvokeEvent(); Console.ReadKey(); } }
1
2
-----
1
2
-----
1
Обробники додаються до спеціального стеку і викликаються по черзі
Видавець не знає скільки обробників і чи будуть вони реагувати на подію
private void Button_Click(object sender, RoutedEventArgs e) - реакція на подію
sender - об'єкт, який визвав подію
e - містить інформацію про маршрутизацію події та додаткову інформацію, напр. код клавіші
EventOne?.Invoke(); - запускати, якщо є обробники ( != null )