当前位置:  开发笔记 > 编程语言 > 正文

在.net析构函数中重新创建对"this"的有根引用是否合法?

如何解决《在.net析构函数中重新创建对"this"的有根引用是否合法?》经验,为你挑选了1个好方法。

在.net中写下以下内容是否合法?

   public class A
    {
        public int i = 0;
        ~A()
        {
            Aref = this;
        }
    }


    public static A Aref;
    static void Main(string[] args)
    {
        Aref = new A();
        int gen = GC.GetGeneration(Aref);
        Aref = null;
        GC.Collect(gen, GCCollectionMode.Forced);
        GC.WaitForPendingFinalizers();
        Console.WriteLine(Aref.i);
        Console.ReadLine();
    }

它工作并按预期将"0"写入控制台,但我想知道它是否保证始终有效.

有人知道幕后发生了什么吗?



1> gustafc..:

它被称为复活,它是合法的.谷歌的".net对象复活"(以及类似的术语),你会发现像:

复活和.NET垃圾收集器

对象复活

只要确保这些僵尸物体不会回来并试图吃掉你的大脑或其他东西.像所有的死灵法一样,这是危险的东西.(主要是因为类层次结构中较高的终结器可以释放一些必要的资源.另请注意,如果对象获得"未引用",则终止器将不会再次运行,除非您调用GC.ReRegisterForFinalize.)

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有