对象的属性是用 C# 中的对象进行垃圾回收,还是它们有单独的 gc 机制

我只是在想一个问题,如果有这样的课程:


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收集?


慕容708150
浏览 101回答 1
1回答

绝地无双

通过这个例子,我们可以说 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);    }}输出:truetruefalsefalse
打开App,查看更多内容
随时随地看视频慕课网APP