Время жизни объекта, если передали ссылку его поля в статический класс?

Вот пример кода:
static class A
{
        static D d;
        void static Func1()
        {
                B b = new B();
                d = b.Func2();
        }
        void static Main()
        {
                Func1();
                GC.Collect();
                System.Threading.Thread.Sleep(10000);
                //b is removed?
        }
}

class B
{
        public D d = new D();
        public D Func2()
        {
                return d;
        }
}

class D
{
}

Будет ли удален объект b из кучи после сборки мусора, если на одно из его полей ссылается статический объект?
  • Вопрос задан
  • 2356 просмотров
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Будет. Ссылка идёт не на поле объекта, а на объект, который когда-то лежал в этом поле. После чистки останется только объект d. Вот если бы в d при конструировании была ссылка на b, как на "родителя", то b бы тоже остался.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы