В каких случаях необходимо отрываться от событий?

Я не уверен, полностью ли я понимаю последствия присоединения к событиям в объектах.

Это мое текущее понимание, правильное или подробное:

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?

Я уверен, что у меня есть места, где я прекратил использовать объекты и не смог отсоединиться от события (например, пример с таймером, который я сделал), поэтому я ищу более четкое объяснение того, как это работает.

Ответы на вопрос(3)

Ваш ответ на вопрос