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

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2015

Сабж. Вот код:

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 из кучи после сборки мусора, если на одно из его полей ссылается статический объект?

Ответы

▲ 3

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

Золотое правило. Если на объект кто-то ссылается, то он не будет удален. Т.к. время жизни статического класса ограничено временем жизни домена, то объект b будет жить пока не умрет статический класс (вместе с доменом), ссылающийся на него.