Есть классы, которые связаны с глобальными настройками проекта. Настройки хранятся в кдассе Settings, в котором для каждой настройки есть события. Чтоб удобнее создавать объекты, поддерживающие настройки я передаю объект Settings в конструкторе, и там подписываюсь на события изменения нужных настроек.
Например:
class UsingSettings{
public UsingSettings(Settings setting){
setting.ShowColumnsChanged += setting_ShowColumnsCanged;
}
}
Вопрос: Когда я все ссылки на объект UsingSettings удаляются, удалит ли его GC, ведь ссылка в списке обработчиков собития SowColumnsChanged ссылка на данный класс поидее остаётся? В деструктор соответственно отписки от событий тоже н езапишеш.
Делал тестовую программу где создавал много объектов, и отписывался от событий с помощью специального метода, но GC всёравно ничего не собирал, даже если написать GC.Collect(). К тому-же в этом случае теряется приемущество автоматической сборки мусора(надо в точках где завершается использование объекта ставить код отписывания от событий). Как правильно поступить в такой ситуации(желательно чтоб отписывание от событий было автоматическое, если это возможно).