C# 如果我引用了超出范围的对象的对象属性,那么外部对象是否有资格被垃圾收集?

C# 如果我引用了超出范围的对象的对象属性,那么外部对象是否有资格被垃圾收集?,c#,.net,garbage-collection,C#,.net,Garbage Collection,在以下代码中: public class MyClass { public SmallObject SmallThing { get; set; } private void MyMethod() { var largeThing = new LargeObject(); SmallThing = largeThing.SmallThing; } } 执行了MyMethod()之后,我引用了SmallThing,但没有引用l

在以下代码中:

public class MyClass
{

    public SmallObject SmallThing { get; set; }

    private void MyMethod()
    {
        var largeThing = new LargeObject();
        SmallThing = largeThing.SmallThing;
    }

}

执行了
MyMethod()
之后,我引用了
SmallThing
,但没有引用
largeThing
。Dot Net是否能够识别
largeThing
符合收集条件,而它包含的
SmallObject
实例不符合收集条件?或者说,dotnet不知何故还记得
largeThing
SmallThing
之间最初的关联吗?(您可以假设
SmallThing
不包含对程序员创建的
largeThing
的显式向后引用)。

由于没有对
largeThing
的活动引用,它将符合垃圾收集的条件。从
SmallThing
返回的任何“隐藏”或隐式引用都不会阻止其符合条件。

您是对的,
largeThing
将在您通过该行后立即收集

SmallThing = largeThing.SmallThing;

它甚至不需要等待
MyMethod
返回,就可以收集它(这假设在没有附加调试程序的情况下运行发布模式)。一旦
largeThing
的最后一次使用通过,它将有资格被收集。

largeThing
将有资格被收集。这是否意味着
MyClass.SmallThing
largeThing
处理后可能会被覆盖?