Здравствуйте, я пытаюсь понять 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
, которые поддерживают их жизнь?