Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

GC.ReRegisterForFinalize-Methode: (Object)

 

Veröffentlicht: Oktober 2016

Fordert beim System den Aufruf des Finalizers für das angegebene Objekt an, für das zuvor SuppressFinalize aufgerufen wurde.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public static void ReRegisterForFinalize(
	object obj
)

Parameter

obj
Type: System.Object

Das Objekt, für das ein Finalizer aufgerufen werden muss.

Exception Condition
ArgumentNullException

obj ist null.

Die ReRegisterForFinalize Methode fügt die obj Parameter, um die Liste der Objekte, die Finalisierung anfordern, bevor der Garbage Collector das Objekt freigegeben. Die obj -Parameter muss der Aufrufer dieser Methode sein.

Aufrufen der ReRegisterForFinalize -Methode garantiert nicht, dass der Garbage Collector den Finalizer eines Objekts aufruft.

Standardmäßig werden alle Objekte, die Finalizer implementieren die Liste der Objekte hinzugefügt, die der Abschluss erfordern; jedoch ein Objekt möglicherweise bereits abgeschlossen oder möglicherweise durch Aufrufen seiner Finalisierung verfolgt deaktiviert die SuppressFinalize Methode.

Dieser Methode können ein Finalizer Wiederbeleben selbst oder ein Objekt, die darauf verweist.

Im folgenden Beispiel wird veranschaulicht, wie die ReRegisterForFinalize-Methode verwenden, um ein Objekt ein zweites finalize Zeit nach der Garbagecollection.

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");
            }
        }
    }
}

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: