C# Listen Objekt selbstzerstörung


DuffCola

Mitglied
Hallo.
Ist es möglich, wenn ich ein Objekt habe, was ich zu einer Liste hinzugefügt habe, das es sich selbst aus der Liste löscht, wenn eine Bool Variable z.B. auf false ist?
Kla ich kann in einer Methode die Liste immer Wieder durchlaufen lassen, und immer checklen, ob die Variable False ist und diese dann zerstören.
Aber ich würde gerne einfach nur wisse, ob es eine art interne selbstzerstörung gibt.
 

Cromon

Erfahrenes Mitglied
Hallo DuffCola,

Das was du machen möchtest schreit förmlich nach dem Observer Pattern. Hier ein einfaches Beispiel:
C#:
    interface ILifetimeObject
    {
        event Action<ILifetimeObject> ObjectDied;
    }

    class UnitObject : ILifetimeObject
    {
        private bool mIsAlive = true;

        public event Action<ILifetimeObject> ObjectDied;


        public void setDead()
        {
            mIsAlive = false;
            if (ObjectDied != null)
                ObjectDied(this);
        }
    }

    class LifetimeManager
    {
        private List<ILifetimeObject> mObjects = new List<ILifetimeObject>();

        private void onObjectDied(ILifetimeObject obj)
        {
            mObjects.Remove(obj);
            obj.ObjectDied -= onObjectDied;
        }

        public void pushObject(ILifetimeObject obj)
        {
            mObjects.Add(obj);
            obj.ObjectDied += onObjectDied;
        }
    }
 

Mohag

Mitglied
IDisposible ableiten und Dispose() hinzufügen.. Schau mal bei Google.

Dispose lässt die Ressourcen wieder frei, somit wird sie auch aus der Liste entfernt.

MfG
 

Spyke

Premium-User
Nö, die Liste so weiß erstmal nixs vom Dispose.
So hättest du jetzt erstmal einen Inkonsistenten Zustand eines Objektes in deiner Liste.

Die System.Windows.Forms.Control.ControlCollection, entfernt zwar Controls die disposed werden, aber das handeln das Control und die Liste selbst für sich über entsprechende Ereignisse.