Управление выпуском экземпляра в C # - PullRequest
0 голосов
/ 19 января 2019

Я понимаю, что 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? как ты можешь быть уверен, что не пропустил ни одного?

Итак, мой вопрос:

Есть ли лучшие способы справиться с такой ситуацией?

...