当属性对象被取消root并标记为垃圾回收时?

时间:2019-06-06 13:06:11

标签: c# garbage-collection

我正在尝试了解以下实现中的GC行为。

访问属性后,我返回一个新对象。如果我第二次访问我的媒体资源,则只要我的MyClass对象还活着,第一个对象将被标记为垃圾回收对象,或者将被植根。

(我知道这是一个糟糕的实现,但目的是要了解GC。)

public class MyClass
{
    public Custom CustomProp=>new Custom();
}

public class Custom
{

}

1 个答案:

答案 0 :(得分:0)

public Custom CustomProp=>new Custom();

由编译器翻译为getter方法:

public Custom get_CustomProp()
{
    return new Custom();
}

因此,没有对存储在您的类中的创建的Custom实例的引用。不用担心,您(显示的代码)不会阻止GC收集对象。

但是,当然:创建的对象是否符合GC的条件,取决于属性的调用方对引用的作用。只要将活动参考保存在某处,GC就不会收集该对象。

而且-正如Marc所评论-没有为GC标记对象的事情。如果不再引用该对象,则可以将其准备用于GC(简单地放置)。
您的属性被第二次调用的事实对先前返回的实例的“可收集性”没有影响。