属性 对象何时取消根并标记为垃圾回收?

When property object get unrooted and marked for garbage collection?

我试图了解以下实现中的 GC 行为。

当我的 属性 被访问时,我 return 一个新对象。如果我第二次访问我的 属性,第一个对象是否会被标记为垃圾收集,或者只要我的 MyClass 对象还活着,它就会被植根。

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

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

public class Custom
{

}
public Custom CustomProp=>new Custom();

被编译器翻译成 getter 方法:

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

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

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

而且 - 正如 评论的那样 - 没有 "marking" GC 对象这样的东西。如果一个对象不再被引用,它就可以进行 GC(简单地说)。
您的 属性 被第二次调用的事实对先前 return 实例的 "collectability" 没有影响。