Почему цель слабой ссылки не собрана - PullRequest
0 голосов
/ 11 октября 2018

Здравствуйте, я пытаюсь понять WeakReference, и я провел небольшой эксперимент:

public class Slave {
            public string Name { get; set; }


        }
        public class WeakOwner{
            public List<WeakReference<Slave>> slaves = new List<WeakReference<Slave>>();
        }


        static void Main(string[] args) {
            Slave slave1 = new Slave { Name = "ditone" };
            Slave slave2 = new Slave { Name = "aditzone" };

            WeakOwner owner = new WeakOwner();

            owner.slaves.Add(new WeakReference<Slave>(slave1));
            owner.slaves.Add(new WeakReference<Slave>(slave2));
            slave1 = null;
            slave2 = null;
            GC.Collect(); 

            Console.ReadLine(); // line where i stopped the debugger 
        }

Я не понимаю, добавляет ли объект owner два WeakReference -и, и я делаюссылаются на объекты null, а затем я GC их, тогда нет другой ссылки, которая содержит объект. Так почему, когда я обращаюсь к отладчику, элементы owner.slaves я все же нахожу два свойства Target не равными null?Разве они не должны быть аннулированы?Кто еще ссылается на slave1 и slave2, которые поддерживают их жизнь?

...