ReRegisterForFinalize Método (Object)
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

GC.ReRegisterForFinalize (Método) (Object)

 

Solicita que el sistema llame al finalizador del objeto especificado, para el que previamente se ha llamado a SuppressFinalize.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public static void ReRegisterForFinalize(
	object obj
)

Parámetros

obj

El objeto cuyo finalizador debe llamarse.

Exception Condition
ArgumentNullException

El valor de obj es null.

El ReRegisterForFinalize método agrega el obj parámetro a la lista de objetos que solicitan una finalización antes de que el recolector de elementos no utilizados libere el objeto.El obj parámetro debe ser el llamador de este método.

Llamar a la ReRegisterForFinalize método no garantiza que el recolector de elementos no utilizados llame al finalizador de un objeto.

De forma predeterminada, todos los objetos que implementan finalizadores se agregan a la lista de objetos que requieren finalización; Sin embargo, un objeto podría ya se han finalizado o que haya deshabilitado la finalización mediante una llamada a la SuppressFinalize (método).

Un finalizador puede usar este método para restablecerse a sí mismo o a un objeto que hace referencia.

En el ejemplo siguiente se muestra cómo usar el método ReRegisterForFinalize para finalizar un objeto una segunda vez después de la recolección de elementos.

using System;

namespace ReRegisterForFinalizeExample
{
    class MyMainClass
    {
        static void Main()
        {
            // Create a MyFinalizeObject.
            MyFinalizeObject mfo = new MyFinalizeObject();

            // Release the reference to mfo.
            mfo = null;

            // Force a garbage collection.
            GC.Collect();

            // At this point mfo will have gone through the first Finalize.
            // There should now be a reference to mfo in the static
            // MyFinalizeObject.currentInstance field.  Setting this value
            // to null and forcing another garbage collection will now
            // cause the object to Finalize permanently.
            MyFinalizeObject.currentInstance = null;
            GC.Collect();
        }
    }

    class MyFinalizeObject
    {
        public static MyFinalizeObject currentInstance = null;
        private bool hasFinalized = false;

        ~MyFinalizeObject()
        {
            if(hasFinalized == false)
            {
                Console.WriteLine("First finalization");

                // Put this object back into a root by creating
                // a reference to it.
                MyFinalizeObject.currentInstance = this;

                // Indicate that this instance has finalized once.
                hasFinalized = true;

                // Place a reference to this object back in the
                // finalization queue.
                GC.ReRegisterForFinalize(this);
            }
            else
            {
                Console.WriteLine("Second finalization");
            }
        }
    }
}

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 1.1
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar:
© 2016 Microsoft