Referenzen auf Instanzen

FJK

Erfahrenes Mitglied
Hallo,

ich nutze c# in vs

ich brauche mehrere Listen in denen Instanzen abgelegt sind.
Die Instanzen in allen Listen sind gleich, nur ähm... anders Sortiert.
Ich möchte jetzt, wenn ich in Irgendeiner Liste eine Instanz ändere, das sie in allen anderen Listen auch geändert wird.
In c++ hätte ich es mit Zeigern gemacht, aber wie mache ich das jetzt in c#?
Ist das auch mit Löschen einer Instanz möglich?

gruß
 
Zuletzt bearbeitet:
Wenn deine Objekte Klasseninstanzen und keine Typeninstanzen sind, dann brauchst du gar nichts weiter tun, denn die Listen speichern nur eine Referenz auf Klasseninstanzen und nicht die Instanz selber.
 
Das Original verwaltet der GarbageCollector für dich. Du hast darauf keinen direkten Zugriff. Es wird automatisch gelöscht wenn keine Referenz mehr zur Instanz existiert. Einen expliziten Destruktor-Aufruf wie in C/C++ gibt es nicht (und wird auch nicht benötigt).
 
Du verwendest diese List-Klasse, richtig? Dann musst du für jede Liste die Remove-Methode aufrufen, damit das Element entfernt wird. Sollte damit zufällig auch die letzte Referenz auf die Instanz verloren gehen, dann sammelt der GarbageCollector das Objekt ein und gibt den Speicherplatz frei sobald er es für nötig erachtet.
 
hmm jo die Klasse stimmt.

Also ich erinnere mich an ein altes Beispiel was ich mal geschrieben habe.
In dem habe ich mir verschiedene Grafiken in eine Liste hinterlegt, Nach dem ausführen von Remove, war jedoch der Speicher im Ram immernoch belegt. selbst nachdem das Programm beendet wurden ist.
 
nochwas, das löschen bereit mir echte probleme

ich habe verschiedene Klassen (A, B und C)
jede Klasse hat eine andere Liste (ListeA, ListeB, ListeC)
in den Listen sind im groben die Gleichen Instanzen enthalten (I, J, K)

der aufbau sieht dann folgendermasen aus:

A -> ListeA (I, J)
B -> ListeB (I, J, K)
C -> ListeC(J, K)

Klasse B enthält eine Liste mit allen Instanzen, wenn ich jetzt K löschen will, wie stelle ich das am geschicktesten an das dieses bei A und C auch aus der Liste verschwindet.

zur zeit Fällt mir nur ein das die Klasse B von der Klasse A und C eine Instanz braucht.

oder ich muss Jeder Instanz in der Liste ein Attribut gebten löschen, was gegebenfalls auf true setze und bei einen aufruf dann die Instanz löscht. Aber das würde vermutlich zu Dateileichen führen, wenn ich nicht in periodischen abständen alle Listen durchlaufe.

ich wäre für jeden rat dankbar
 
Das kann mehrere Gründe haben.
Entweder hast du in den Grafiken unverwalteten Code verwendet.
Oder der GarbageCollector hat es noch nicht für nötig erachtet die Ressourcen frei zu geben, da zum Beispiel noch genügend freier Speicher vorhanden war.
 
hmm ok danke schonmal

läuft der garbagecollector dann weiter, auch wenn das programm beendet wurden ist?

und
nochwas, das löschen bereit mir echte probleme

ich habe verschiedene Klassen (A, B und C)
jede Klasse hat eine andere Liste (ListeA, ListeB, ListeC)
in den Listen sind im groben die Gleichen Instanzen enthalten (I, J, K)

der aufbau sieht dann folgendermasen aus:

A -> ListeA (I, J)
B -> ListeB (I, J, K)
C -> ListeC(J, K)

Klasse B enthält eine Liste mit allen Instanzen, wenn ich jetzt K löschen will, wie stelle ich das am geschicktesten an das dieses bei A und C auch aus der Liste verschwindet.

zur zeit Fällt mir nur ein das die Klasse B von der Klasse A und C eine Instanz braucht.

oder ich muss Jeder Instanz in der Liste ein Attribut gebten löschen, was gegebenfalls auf true setze und bei einen aufruf dann die Instanz löscht. Aber das würde vermutlich zu Dateileichen führen, wenn ich nicht in periodischen abständen alle Listen durchlaufe.

ich wäre für jeden rat dankbar
 

Neue Beiträge

Zurück