tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
26
ZUGRIFFE
877
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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²

  3. #3
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    und wo liegt dann das original?
    wie kann ich dann eine instanz löschen?
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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²

  5. #5
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    also muss ich in jeder liste die instanz suchen und delete aufrufen oder?
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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²

  7. #7
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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.
     

  8. #8
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

  9. #9
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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²

  10. #10
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

  11. #11
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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!
    Code csharp:
    1
    2
    3
    
    ListeA.Remove(K);
    ListeB.Remove(K);
    ListeC.Remove(K);
    Das K in ListeA gar nicht vorhanden war stört die Remove-Methode nicht. Der Rückgabewert ist dann lediglich False.
     
    hihi = -h²

  12. #12
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    ja ok, aber ich müsste das dann ja in drei verschiedenen instanzen machen oder?
     

  13. #13
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Wie meinst du das? ListaA, ListeB und ListeC sind doch verschiedene Instanzen.
     

  14. #14
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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.
     

  15. #15
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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

  1. Referenzen zurückgeben
    Von hoctar im Forum PHP
    Antworten: 5
    Letzter Beitrag: 05.08.10, 12:51
  2. dll referenzen
    Von DerStauner im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 25.04.09, 09:10
  3. Referenzen
    Von Nob im Forum PHP
    Antworten: 3
    Letzter Beitrag: 24.04.07, 20:34
  4. Instanzen/Referenzen
    Von Mendragol im Forum Autodesk Maya (ehemals Alias)
    Antworten: 2
    Letzter Beitrag: 11.12.05, 21:58
  5. C Referenzen
    Von FactorX im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 01.05.02, 16:10