Події повідомляють іншим об'єктам про зміни
- Інтерфейс користувача – подія миш над кнопкою, миш натиснута
- Серверні програми – щоб позбутися обслуговуючих процесів
- Ігри – керувати багатьма об'єктами
- 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 )