Я не уверен, что полностью понимаю последствия присоединения к событиям в объектах.
Это мое текущее понимание, правильное или подробное:
<сильный>1. Присоединение к событиям локального класса не нужно отсоединять
Примеры:
this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing);
public event EventHandler OnMyCustomEvent = delegate { };
Я предполагаю, что когда ваш объект удаляется или собирается мусор, функции освобождаются и автоматически отсоединяются от событий.
<сильный>2. Присоединение к объектам, которые вам больше не нужны (= null;), должно быть отсоединено от
Примеры: присоединение к событию Elapsed таймера, на которое вы отвечаете только один раз. Я предполагаю, что вам нужно сохранить таймер в локальной переменной, чтобы вы могли отсоединить событие Elapsed после того, как событие сработает. Таким образом, объявление таймера в области локального метода приведет к утечке:
System.Timers.Timer myDataTimer = new System.Timers.Timer(1000);
myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed);
<сильный>3. Присоединение к событиям в локальном объекте вашего класса не требует удаления?
Например, если у вас есть ObservableCollection, который вы создаете, отслеживаете и оставляете умирать. Если вы присоединитесь к событию CollectionChanged, используя локальную закрытую функцию, не будет ли эта функция освобождена, когда ваш класс будет собран мусором, что приведет к освобождению ObservableCollection?
Я уверен, что у меня есть места, где я перестал использовать объекты и не смог отсоединиться от события (например, пример таймера, который я сделал), поэтому я ищу более четкое объяснение того, как это работает.