Я не уверен, полностью ли я понимаю последствия присоединения к событиям в объектах.
Это мое текущее понимание, правильное или подробное:
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?
Я уверен, что у меня есть места, где я прекратил использовать объекты и не смог отсоединиться от события (например, сделанный мной пример таймера), поэтому я ищу более четкое объяснение того, как это работает.