Я понимаю, что C # использует сборщик мусора для управления всеми управляемыми ресурсами, когда на экземпляр больше не ссылаются, GC может собирать их.
Но мой вопрос: есть ли хорошая практика для правильного удаления этих ссылок?
Допустим, мы купили зоопарк , в этом зоопарке у нас 1 тигр и 1 сигнал тревоги
public class Zoo
{
public static Action OpenZoo;
public Tiger tiger1 = new Tiger();
}
Тигр подписался на событие OpenZoo
и будет издавать звук при открытии зоопарка
public class Tiger
{
public Tiger()
{
Zoo.OpenZoo += Meow;
}
private void Meow() { }
}
Однажды мы хотим избавиться от тигра, насколько я понимаю, мы НЕ МОЖЕМ просто сделать
tiger1 = null
мы должны сначала заставить тигра отказаться от подписки на сигнал тревоги, а затем обнулить тигра1 и надеяться, что gc сработает или вызовет CG.collect.
Zoo.OpenZoo -= Meow;
tiger1 = null
в этом примере это не так сложно, но представьте, что у нас есть несколько объектов, подписывающихся на несколько событий, на которые ссылаются несколько объектов и т. Д.
что если этот tiger1 подписался на все каналы youtube в мире, если нам нужно избавиться от этого тигра, мы должны снова отписаться от всех каналов youtube? как ты можешь быть уверен, что не пропустил ни одного?
Итак, мой вопрос:
Есть ли лучшие способы справиться с такой ситуацией?