Ответ
Да, если подписка была создана, и объект подписчик живет дольше издателя. Иначе может возникнуть утечка памяти, так как издатель будет держать ссылку на подписчика.
Пример:
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).
- Если подписка создана в конструкторе или методе инициализации.
Исключение: Статические события или подписка на короткоживущие объекты, где утечка маловероятна.