Правильно отписаться от событий
От: America  
Дата: 01.12.10 15:50
Оценка:
Есть классы, которые связаны с глобальными настройками проекта. Настройки хранятся в кдассе Settings, в котором для каждой настройки есть события. Чтоб удобнее создавать объекты, поддерживающие настройки я передаю объект Settings в конструкторе, и там подписываюсь на события изменения нужных настроек.

Например:

class UsingSettings{
 public UsingSettings(Settings setting){
  setting.ShowColumnsChanged += setting_ShowColumnsCanged;
 }
}


Вопрос: Когда я все ссылки на объект UsingSettings удаляются, удалит ли его GC, ведь ссылка в списке обработчиков собития SowColumnsChanged ссылка на данный класс поидее остаётся? В деструктор соответственно отписки от событий тоже н езапишеш.

Делал тестовую программу где создавал много объектов, и отписывался от событий с помощью специального метода, но GC всёравно ничего не собирал, даже если написать GC.Collect(). К тому-же в этом случае теряется приемущество автоматической сборки мусора(надо в точках где завершается использование объекта ставить код отписывания от событий). Как правильно поступить в такой ситуации(желательно чтоб отписывание от событий было автоматическое, если это возможно).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.