垃圾收集、.NET、C#
我有三个对象A,B和C。C是A和B的子对象。C指A和B。A和B指C。 我知道当从A和B中删除对C的引用时,C变成垃圾并将由GC收集垃圾收集、.NET、C#,c#,.net,garbage-collection,C#,.net,Garbage Collection,我有三个对象A,B和C。C是A和B的子对象。C指A和B。A和B指C。 我知道当从A和B中删除对C的引用时,C变成垃圾并将由GC收集 我的理解正确吗 我应该将C中对A和B的引用设置为NULL吗 如果是,好处是什么 谢谢 Ram如果没有对C的实时引用,那么它就有资格进行垃圾收集。但这并不意味着垃圾会被直接收集 如果对象即将成为垃圾收集的合格对象,则无需将对象内的引用设置为null 请注意,如果没有对A、B或C的“根”引用,则它们都将有资格进行垃圾收集,即使它们继续相互引用。如果没有对C的活动引用,则
Ram如果没有对C的实时引用,那么它就有资格进行垃圾收集。但这并不意味着垃圾会被直接收集 如果对象即将成为垃圾收集的合格对象,则无需将对象内的引用设置为null
请注意,如果没有对A、B或C的“根”引用,则它们都将有资格进行垃圾收集,即使它们继续相互引用。如果没有对C的活动引用,则它将有资格进行垃圾收集。但这并不意味着垃圾会被直接收集 如果对象即将成为垃圾收集的合格对象,则无需将对象内的引用设置为null 请注意,如果没有对A、B或C的“根”引用,则它们都有资格进行垃圾收集,即使它们继续相互引用。请显示代码,而不是用相对模糊的术语描述事物。一个对象是另一个对象的“子对象”的概念没有得到很好的定义……这毫无意义。你说的“孩子”是指继承人吗?如果是这样,那么在C#中不能从多个类继承。如果C从B继承,那么B到底是怎么从C继承的呢?不计算。请显示代码,而不是用相对模糊的术语描述事物。一个对象是另一个对象的“子对象”的概念没有得到很好的定义……这毫无意义。你说的“孩子”是指继承人吗?如果是这样,那么在C#中不能从多个类继承。如果C从B继承,那么B到底是怎么从C继承的呢?不计算。
public class A { public C Cr { get; set; } }
public class B { public C Cr { get; set; } }
public class C
{
public A Ar { get; set; }
public B Br { get; set; }
}
class Program
{
static void Main(string[] args)
{
var oa = new A();
var ob = new B();
var oc = new C();
oc.Ar = oa;
oc.Br = ob;
oa.Cr = oc;
ob.Cr = oc;
// Some operation
oa.Cr = null;
ob.Cr = null;
//is the following code required?
// if yes, what is the benefit?
oc.Ar = null;
oc.Br = null;
}