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
处理后可能会被覆盖?