方法甚至在终止后返回类引用

0 c# garbage-collection

我刚开始从文档中学习C#7.0.我了解到Class是一种引用类型.但是,方法如何返回对已经销毁的对象的引用.

using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    public class Program
    {
        public static void Main()
        {
            Test b = GetObj();
            Console.WriteLine(b.val);
            Console.ReadLine();
        }
        public class Test
        {
            public int val;
        }
        public static Test GetObj()
        {
            Test t = new Test();
            t.val = 100;
            return t;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这里,方法GetObj创建一个Test对象,并返回它.根据文档,仅返回对它的引用.因此在函数调用之后,t应该将其作为垃圾收集,因此b不应该引用任何内容.

但代码仍然打印出来100.为什么?

Pat*_*man 9

所以在函数调用之后,"t"应该被收集为垃圾,所以"b"应该什么都不引用.

否.垃圾收集器知道有多少变量仍在引用该实例,因此根本不会收集垃圾.当没有变量引用该实例时,垃圾收集器将启动.

  • 垃圾收集器不会立即收集,它会定期检查有资格收集的对象 (3认同)