Frage zu Referenzen & Objekten (unterschied?)



  • Hi leute,

    Im Vorraus ich habe grad keien Möglichkeit nachzugucken da ich auf der Arbeit bin. Das etzte mal das ich was zu C# gemacht hab ist ~7-8 Tage her. Ich will eig vorallem wissen ob ich es richtig behalten habe.

    EIGENTLICH... habe ich das Gefühl das ich es verstanden habe.

    Referenzen sind Verweise auf ein Objekt und beinhalten das Objekt nicht direkt, sie verweisen nur auf den "Ort" des Objektes im Arbeitsspeicher. Objekte sind "wirklich" da , wenn ich Referenz a und Referenz b auf das objekt "danke" zeigen und ich Referenz a lösche ist das objekt "danke" nicht weg, wenn ich aber objekt "danke" lösche ist es weg.

    Mein Problem vorallem ist das ich nicht mehr weiss was ich mache...

    <...>
    Hallo danke = new danke;
    danke.test;
    <...>
    

    dabei hab ich zwar ein neues Objekt erzeugt und auch aufgerufen aber ist es eine Referenz? bzw WAS ist eine Referenz im code ?

    <...>
    hallo = danke;
    <...>
    

    ist das eine Referenz? also die Variable hallo ?

    Das alles verwirrt mich etwas da ich eher die Zeiger von C++ bzw die "^" von C++/Cli gewohnt bin (hab den namen vom "^" ding vergessen")

    Ein Problem von mir ist halt ohne mich nochmal zu vergewissern einen Code zu schreiben also "Freihand". Hab ich das so in etwa richtig verstanden ?



  • dangerberk schrieb:

    ...
    Referenzen sind Verweise auf ein Objekt und beinhalten das Objekt nicht direkt, sie verweisen nur auf den "Ort" des Objektes im Arbeitsspeicher. Objekte sind "wirklich" da , wenn ich Referenz a und Referenz b auf das objekt "danke" zeigen und ich Referenz a lösche ist das objekt "danke" nicht weg, wenn ich aber objekt "danke" lösche ist es weg. ...

    und wo liegt nun das problem? scheint doch, als hättest du es eigentlich verstanden

    edit: eine referenz ist grob gesehen ein äquivalent zum pointer aus c++, also die adresse eines objektes im speicher, nur halt von der VM verwaltet.



  • class A
    {
    }
    
    A a = null;   // a ist eine Referenz auf ein Objekt vom Typ A, welche auf kein Objekt zeigt.
    a = new A();  // jetzt zeigt diese Referenz auf ein Objekt vom Typ A.
    a = null;     // jetzt zeigt diese Referenz wieder auf kein Objekt.
                  // das vorher erzeugt Objekt ist jetzt "verweist" und wird bei nächster Gelegenheit vom GC aufgeräumt (vereinfacht gesagt).
    

    hab den namen vom "^" ding vergessen"

    Heisst Managed Reference.

    Simon



  • dangerberk schrieb:

    Das alles verwirrt mich etwas da ich eher die Zeiger von C++ bzw die "^" von C++/Cli gewohnt bin (hab den namen vom "^" ding vergessen")

    Wenn du von der C++ Ecke kommst:

    valuetype t; entspricht von der Handhabung her in C++ einem Wert.

    objecttype t; entspricht von der Syntax her in C++ einer Referenz, von den Möglichkeiten eher einem Zeiger (null zulässig, änderbar...). Wobei dieser nicht auf eine feste Adresse verweist, sondern sich das Ziel in der Position ändern kann (GC-bedingt).

    cu André


Anmelden zum Antworten