Возможный дубликат:
Разница Воскрешения при использовании Object Initializer
Мне трудно понять, как сборщик мусора работает на С# (я использую 2012, поэтому С# 4.5). Вот мой пример кода:
public class A
{
public int c;
public A(){}
public A(int pC)
{
c = pC;
}
}
public static void Main()
{
// Test 1
var a = new A {c=199};
var aRef = new WeakReference(a);
a = null;
Console.WriteLine(aRef.IsAlive);
GC.Collect();
Console.WriteLine(aRef.IsAlive);
// Console.WriteLine(GC.GetGeneration(aRef.Target)); //output 1
// Test 2
a = new A (200);
aRef = new WeakReference(a);
a = null;
Console.WriteLine(aRef.IsAlive);
GC.Collect();
Console.WriteLine(aRef.IsAlive);
}
Выход - True/True/True/False
Мне кажется, что в обоих тестах объект в куче не имеет корня перед вызовом GC.Collect. Но бывает так, что в тесте 1 объект проходит через силу gc, а в тесте 2 - нет. Итак, есть ли что-то загадочное в использовании инициализатора? Я предполагаю, что при использовании инициализатора может быть "некоторый дополнительный код", который станет сильным корнем для одного и того же объекта.....
Спасибо.