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