为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕容708150 2022-12-31 11:09:50
我只是在想一个问题,如果有这样的课程: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收集?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

通过这个例子,我们可以说 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


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号