C# Події

2075 / C# / Події

 

Події повідомляють іншим об'єктам про зміни

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

 


 

Обробники додаються до спеціального стеку і викликаються по черзі

Видавець не знає скільки обробників і чи будуть вони реагувати на подію

 

private void Button_Click(object sender, RoutedEventArgs e) – реакція на подію

sender – об'єкт, який визвав подію

e – містить інформацію про маршрутизацію події та додаткову інформацію, напр. код клавіші

 

EventOne?.Invoke(); – запускати, якщо є обробники ( != null )