Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
垃圾收集、.NET、C#_C#_.net_Garbage Collection - Fatal编程技术网

垃圾收集、.NET、C#

垃圾收集、.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的活动引用,则

我有三个对象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的活动引用,则它将有资格进行垃圾收集。但这并不意味着垃圾会被直接收集

    如果对象即将成为垃圾收集的合格对象,则无需将对象内的引用设置为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;
    
        }