Comment supprimer une instance d’une classe?

J’ai donc ce projet qui crée plusieurs instances d’une classe et les répertorie.

À un moment donné, la classe instanciée n’est plus nécessaire. Comment puis-je le vider?

Jusqu’à présent, cela ne se produit pas, même si la classe n’a plus rien à faire (s’il s’agissait d’une seule classe statique, le programme aurait été fermé), il est toujours dans ma liste et ses variables publiques sont toujours disponibles. ..

Vous pouvez demander à vos instances de déclencher un événement (OnInactivated, par exemple). La classe list devrait append un gestionnaire pour de tels événements lorsque l’élément est ajouté à la liste (sous-classe ou encapsulation d’une liste et substitution de la méthode Add). Lorsque l’événement est déclenché, l’object sera supprimé de la liste par la liste. En supposant que l’object ne soit référencé dans aucune autre liste (qui pourrait également être à l’écoute), le ramasse-miettes est libre de s’occuper de l’object.

De cette manière, l’object n’a pas besoin de garder une trace de toutes les références à lui-même et de savoir comment informer le détenteur de la référence de libérer la référence.

Voici un exemple exécutable: http://www.coderun.com/ide/?w=Hw83i0wAQkugUif5Oj2lmw

Votre question implique que vous avez ces instances dans une liste quelconque. Supprimez de la liste les instances dont vous ne voulez plus, en vous assurant qu’aucune autre référence n’y est faite. À un moment donné, le ramasse-miettes les récupérera.

Pourquoi le souci de le vider? Pourquoi ne pas laisser simplement .Net Garbage Collection agir?

Vous pouvez aussi implémenter IDisposable et appeler

MyClass.Dispose(); 

UPDATE: On dirait que vous voulez une collection personnalisée, pas une liste, qui ne renverra que des classes actives. Créez une nouvelle classe appelée MyClassCollection qui implémente ICollection et assurez-vous qu’elle ne renvoie que des classes actives.

Exemple pour expliquer, espérons-le, ce qui devrait arriver:

 public class MyClass { public ssortingng MySsortingng { get; private set; } public int MyInt { get; private set; } public double MyDouble { get; private set; } public MyClass(ssortingng mySsortingng, int myInt, double myDouble){ MySsortingng = mySsortingng; MyInt = myInt; MyDouble = myDouble; } } public class SomeOtherClass{ public List m_Instances = new List(); public void FillList(){ //Instantiate 3 items, and add to the list m_Instances.Add(new MyClass("1", 2, 3d)); m_Instances.Add(new MyClass("4", 5, 6d)); m_Instances.Add(new MyClass("7", 8, 9d)); } public void RemoveFirst(){ //Remove the first one. As long as the removed item has no //other instances, the Garbage Collector will (in its own time) //destroy that unused object, and reclaim the memory. m_Instances.RemoveAt(0); } } 

Une solution plus générale pour référencer des objects sans empêcher leur récupération de place consiste à utiliser un WeakReference .