我只是在考虑一个问题,如果有这样的课程:
public class A
{
public CustomType PropertyA { get; set; }
public CustomType PropertyB { get; set; }
}
然后创建一个实例:
var a = new A
{
PropertyA = SomeValue,
PropertyB = SomeOtherValue
};
然后我将PropertyA
设置为null,就像a.PropertyA = null;
一样,会PropertyA
的值被垃圾回收,还是直到对象a
被回收后才被回收?
答案 0 :(得分:0)
通过这个例子,我们可以说GC对于对象的任何属性实例都是独立工作的。
using System;
public class Dog
{
public Dog(string name)
{
this.Name = name;
}
public string Name;
public Breed Breed;
}
public class Breed
{
public Breed(string name)
{
Name = name;
}
public string Name;
}
public class Program
{
public static void Main()
{
Dog dog = new Dog("Bowser");
dog.Breed = new Breed("Pug");
WeakReference dogRef = new WeakReference(dog);
WeakReference breedRef = new WeakReference(dog.Breed);
Console.WriteLine(dogRef.IsAlive);
Console.WriteLine(breedRef.IsAlive);
dog.Breed = null;
GC.Collect();
Console.WriteLine(breedRef.IsAlive);
dog = null;
GC.Collect();
Console.WriteLine(dogRef.IsAlive);
}
}
true
true
false
false