ERLEDIGT
NEIN
NEIN
ANTWORTEN
26
26
ZUGRIFFE
877
877
EMPFEHLEN
-
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ßGeändert von FJK (26.12.10 um 14:10 Uhr) Grund: details vergessen
-
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.
hihi = -h²
-
und wo liegt dann das original?
wie kann ich dann eine instanz löschen?
-
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).
hihi = -h²
-
also muss ich in jeder liste die instanz suchen und delete aufrufen oder?
-
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.
hihi = -h²
-
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.hihi = -h²
-
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
-
Der GarbageCollector ist bestandteil des .Net-Frameworks. Wie genau der implementiert ist weiß ich leider nicht. Aber du kannst dir sicher sein, dass er seine Arbeit gut und sinnvoll tut

Wenn du K aus allen drei Listen löschen willst, dann ruf einfach drei mal die Remove-Methode auf, wie oben geschrieben!
Das K in ListeA gar nicht vorhanden war stört die Remove-Methode nicht. Der Rückgabewert ist dann lediglich False.Code csharp:1 2 3
ListeA.Remove(K); ListeB.Remove(K); ListeC.Remove(K);
hihi = -h²
-
ja ok, aber ich müsste das dann ja in drei verschiedenen instanzen machen oder?
-
Wie meinst du das? ListaA, ListeB und ListeC sind doch verschiedene Instanzen.
-
die listen stehen in drei verschienden instanzen drin
also müsste ich
A.ListeA.Remove(K);
B.ListeB.Remove(K);
C.ListeC.Remove(K);
ausführen, nur dazu müsste ich an irgendeiner stelle die Instanzen A, B und C kennen.
-
So wie es ausschaut, ja: du musst Verweise auf A, B und C haben.
Aber vielleicht lässt sich dein Problem grundlegend anders lösen. Was ist denn dein Ziel?hihi = -h²
Ähnliche Themen
-
Referenzen zurückgeben
Von hoctar im Forum PHPAntworten: 5Letzter Beitrag: 05.08.10, 12:51 -
dll referenzen
Von DerStauner im Forum .NET Windows FormsAntworten: 5Letzter Beitrag: 25.04.09, 09:10 -
Referenzen
Von Nob im Forum PHPAntworten: 3Letzter Beitrag: 24.04.07, 20:34 -
Instanzen/Referenzen
Von Mendragol im Forum Autodesk Maya (ehemals Alias)Antworten: 2Letzter Beitrag: 11.12.05, 21:58 -
C Referenzen
Von FactorX im Forum C/C++Antworten: 3Letzter Beitrag: 01.05.02, 16:10





Zitieren

Login





