В .NET нет способа фактически убить / удалить объект. Все, что вы можете сделать явно, это избавиться от объекта. Это не более, чем простой вызов Dispose () для вашего объекта. Это позволит вам очистить ваш объект до того, как он может быть собран сборщиком мусора в более позднее время (что вы не можете реально навредить). См. IDisposable для более подробной информации. Второй вариант, чтобы получить возможность очистить ваш объект до того, как он будет собран GC, - реализовать финализатор . В отличие от Dispose () он будет вызываться GC автоматически. Опять же, оба способа - это просто способ очистить любые ресурсы, прежде чем объект перестанет существовать.
Таким образом, чтобы ответить на ваш вопрос, если ваш объект A «убит», что происходит только тогда, когда на него больше не ссылается ни один другой объект, B и C «убивают», ЕСЛИ на них ссылаются только через A. Обычно вы этого не делаете. иметь какое-либо влияние на то, когда это на самом деле происходит. Все, что вы можете сделать, это внедрить финализатор, чтобы получать уведомления, когда это произойдет.
GC - это фоновая служба, которая работает в отдельном потоке, который следует сложной логике, когда фактически удаляет объекты.
Если вы хотите получить общее представление о том, как работает GC, я бы предложил следующие две статьи . Несмотря на то, что они немного устарели, они по-прежнему полностью применимы.