Нужно ли отписываться от события

«Нужно ли отписываться от события» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, если подписка была создана, и объект подписчик живет дольше издателя. Иначе может возникнуть утечка памяти, так как издатель будет держать ссылку на подписчика.

Пример:

public class Publisher
{
    public event EventHandler SomethingHappened;
}

public class Subscriber
{
    public void Subscribe(Publisher publisher)
    {
        publisher.SomethingHappened += OnSomethingHappened;
    }

    public void Unsubscribe(Publisher publisher)
    {
        publisher.SomethingHappened -= OnSomethingHappened;
    }

    private void OnSomethingHappened(object sender, EventArgs e) { }
}

Когда отписываться:

  • Если подписчик — временный объект (например, ViewModel в UI).
  • Если подписка создана в конструкторе или методе инициализации.

Исключение: Статические события или подписка на короткоживущие объекты, где утечка маловероятна.