tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
213
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 habe ein merkwürdiges Problem in C#, ich nutze VS 10 RC. Win 7.

    Ich habe eine Klasse A

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    class A
    {
    public int ab;
     
     public A(int a)
    {
     ab = a;
    }
    }


    und ich habe zwei Klassen in denen ich eine Liste habe.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    class Liste1
    {
    public List<A> ErsteListe= new List<A>();
     
     public Liste()
    {
    }
    }
     
     
    class Liste2
    {
    public List<A> ZweiteListe= new List<A>();
     
     public Liste()
    {
    }
    }

    Wenn ich jetzt die ErsteListe mit Instanzen von A fülle, wie bekomme ich dann:
    1. eine Copy einer bestimmten Instanz aus der ErstenListe in die ZweiteListe?
    2. eine Referenz von einer bestimmten Instanz aus der ErstenListe in die ZweiteListe?

    Mit:
    Code :
    1
    
    Liste2.ZweiteListe.Add(Liste1.ErsteListe[3]);
    bekomme ich meistens anscheinend eine Referenz.

    Mit:
    Code :
    1
    2
    
    A ATemp = new A(Liste1.ErsteListe[3].ab);
    Liste2.ZweiteListe.Add(ATemp);
    Merkwürdiger weise bekomme ich auch hier eine Referenz
    Ich verstehe leider nicht warum?

    Können mir hier die Schlüsselwörter ByRef und ByVal weiterhelfen?
    Mit Zeigern wäre das ganze so schön einfach
    Geändert von FJK (12.03.10 um 21:56 Uhr)
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    In .NET werden Reference Types (alle Klassen) als Referenz übergeben (daher auch der Name).

    Wenn du eine Kopie deiner Objekte haben willst, solltest die Klasse IClonable implementieren. Mit der Methode Clone kannst du dann, wie der Name sagt, einen Klon anlegen.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    ok, wird ich nachher mal probieren,
    Was ist wenn ich eine Instanz in der Liste lösche, wie lösche ich diese dann auch im Speicher?
    Gibt es noch Destruktoren?

    Und was passiert wenn ich die Instanz im Speicher Lösche mit den Listeneintrag, ist der dann NULL?
    Geändert von FJK (13.03.10 um 08:56 Uhr)
     

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von FJK Beitrag anzeigen
    ok, wird ich nachher mal probieren,
    Was ist wenn ich eine Instanz in der Liste lösche, wie lösche ich diese dann auch im Speicher?
    Wenn du die Instanz in der Liste "löschst" (List.Remove), entfernst du nur das Objekt aus der Liste (die Referenz wird gelöscht).Wenn es noch weitere Referenzen auf das Objekt gibt, ist es auch noch verfügbar. Sind keine Referenzen mehr vorhanden wird der Speicherbereich vom Garbage Collector freigegeben
    Zitat Zitat von FJK Beitrag anzeigen
    Gibt es noch Destruktoren?
    Wenn du einen für deine Klasse schreibst, gibt es einen
    Mehr zum Thema findest du unter http://www.c-sharpcorner.com/UploadF...structors.aspx
    Zitat Zitat von FJK Beitrag anzeigen
    Und was passiert wenn ich die Instanz im Speicher Lösche mit den Listeneintrag, ist der dann NULL?
    Man kommt in .NET nur mit vielen schmutzigen Tricks an die direkten Objekte im Speicher. Du arbeitest immer auf einer Referenz! Soll heißen, dein Szenario ist in .NET nicht möglich. Die Runtime verhindert es.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. Instanzen in Listen Registrieren und drauf zugreifen
    Von chetigol0308 im Forum Java Grundlagen
    Antworten: 1
    Letzter Beitrag: 10.02.09, 09:30
  2. Mit verketteten Listen Instanzen verwalten
    Von Theranium im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 10.11.07, 12:21
  3. Antworten: 4
    Letzter Beitrag: 25.04.05, 22:15
  4. Darstellung in Listen oder Grafik
    Von kerian im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 13.11.03, 20:06
  5. CHMOD 777 oder 666 für copy()
    Von kodiacc im Forum Hosting & Webserver
    Antworten: 6
    Letzter Beitrag: 09.07.03, 19:11