Сохранить это при финализации

Как можно определить код, который хранит «это» во время завершения класса? Как должен вести себя сборщик мусора (, если он определен где-то )?

На мой взгляд, GC должен несколько раз финализировать экземпляр класса, а следующее тестовое приложение должно напечатать «66», но финализатор выполняется только один раз, в результате чего приложение напечатает «6».

Несколько строк кода:

using System;

namespace Test
{
    class Finalized
    {
        ~Finalized()
        {
            Program.mFinalized = this;
        }

        public int X = 5;
    }

    class Program
    {
        public static Finalized mFinalized = null;

        static void Main(string[] args)
        {
            Finalized asd = new Finalized();
            asd.X = 6;
            asd = null;
            GC.Collect();

            if (mFinalized != null)
                Console.Write("{0}", mFinalized.X);

            mFinalized = null;
            GC.Collect();

            if (mFinalized != null)
                Console.Write("{0}", mFinalized.X);
        }
    }
}

Я пытаюсь понять, как финализаторы управляют памятью экземпляра. В моем приложении может быть желательно повторно -использовать ссылку на экземпляр для дальнейшей обработки.

Понятно, что финализатор не "освобождает" память (, по крайней мере, в моем тестовом приложении ). Можно ли повторно использовать кусок памяти для других целей? Или даже освободили? А если нет, то это утечка памяти или что?

Теперь я запутался больше, чем раньше.

5
задан Luca 16 August 2012 в 23:28
поделиться