Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

GC.ReRegisterForFinalize, méthode

Demande que le système appelle le finaliseur pour l'objet spécifié, pour lequel SuppressFinalize a été précédemment appelé.

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)
public static void ReRegisterForFinalize(
	Object obj
)

Paramètres

obj
Type : System.Object
Objet pour lequel un finaliseur doit être appelé.
Exception Condition
ArgumentNullException

obj est null.

La méthode ReRegisterForFinalize ajoute le paramètre obj à la liste des objets qui demandent à être finalisés avant que le garbage collector ne libère l'objet. Le paramètre obj doit être l'appelant de cette méthode.

L'appel à la méthode ReRegisterForFinalize ne garantit pas que le garbage collector appellera le finaliseur d'un objet.

Par défaut, tous les objets qui implémentent des finaliseurs sont ajoutés à la liste des objets qui demandent à être finalisés ; cependant, un objet peut déjà avoir été finalisé ou avoir désactivé la finalisation en appelant la méthode SuppressFinalize.

Un finaliseur peut utiliser cette méthode pour se réactiver ou réactiver un objet qu'il référence.

L'exemple suivant montre comment utiliser la méthode ReRegisterForFinalize pour finaliser une deuxième fois un objet après le garbage collection.


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


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Pris en charge dans :

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ