События и их генерация в C#

НАВИГАЦИЯ ПО СТРАНИЦЕ

Определение Подписка на события Генерация и вызов событий

События в C# представляют собой механизм, позволяющий объектам уведомлять другие объекты о том, что произошло определенное действие. Они часто используются для реализации паттерна наблюдатель ("Observer") в объектно-ориентированном программировании.

  1. Определение событий:

    • Событие — это механизм, позволяющий классу оповещать другие классы о том, что что-то произошло.

    • Они объявляются с использованием ключевого слова event.

      public class Publisher
      {
          public event EventHandler SomeEvent;
          
          public void RaiseEvent()
          {
              OnSomeEvent();
          }
      
          protected virtual void OnSomeEvent()
          {
              SomeEvent?.Invoke(this, EventArgs.Empty);
          }
      }
  2. Подписка на события:

    • Классы могут подписываться на события других классов для обработки уведомлений.

      public class Subscriber
      {
          public void Subscribe(Publisher publisher)
          {
              publisher.SomeEvent += HandleEvent;
          }
      
          private void HandleEvent(object sender, EventArgs e)
          {
              Console.WriteLine("Event handled");
          }
      }
  3. Генерация и вызов событий:

    • Классы, определяющие события, могут вызывать их, уведомляя подписчиков о произошедших событиях.

      public class Program
      {
          public static void Main(string[] args)
          {
              Publisher publisher = new Publisher();
              Subscriber subscriber = new Subscriber();
      
              subscriber.Subscribe(publisher);
      
              publisher.RaiseEvent();
          }
      }

Пример кода:

using System;

public class Publisher
{
    public event EventHandler SomeEvent;

    public void RaiseEvent()
    {
        OnSomeEvent();
    }

    protected virtual void OnSomeEvent()
    {
        SomeEvent?.Invoke(this, EventArgs.Empty);
    }
}

public class Subscriber
{
    public void Subscribe(Publisher publisher)
    {
        publisher.SomeEvent += HandleEvent;
    }

    private void HandleEvent(object sender, EventArgs e)
    {
        Console.WriteLine("Event handled");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        subscriber.Subscribe(publisher);

        publisher.RaiseEvent();
    }
}

Этот код показывает класс Publisher, который определяет событие SomeEvent, класс Subscriber, который подписывается на это событие и метод Main, который создает экземпляры классов и вызывает событие.

События позволяют объектам взаимодействовать, оповещая друг друга о произошедших событиях. Они предоставляют гибкий механизм для реагирования на изменения в программе.