.NET Framework Plusieurs objets morts


Exemple

Que se passe-t-il si deux (ou plusieurs) objets morts se réfèrent l'un à l'autre? Ceci est illustré dans l'exemple ci-dessous, en supposant que OtherObject est une propriété publique de FinalizableObject:

var obj1 = new FinalizableObject1(); 
var obj2 = new FinalizableObject2();
obj1.OtherObject = obj2;
obj2.OtherObject = obj1;
obj1 = null; // Program no longer references Finalizable1 instance
obj2 = null; // Program no longer references Finalizable2 instance
// But the two objects still reference each other
GC.Collect();

Cela produit la sortie suivante:

<namespace>.FinalizedObject1 initialized
<namespace>.FinalizedObject2 initialized
<namespace>.FinalizedObject1 finalized
<namespace>.FinalizedObject2 finalized

Les deux objets sont finalisés et libérés du tas géré même s'ils se référencent l'un l'autre (car aucune autre référence n'existe à aucun d'entre eux à partir d'un objet réel).