Referenzen auf lokale Variablen



  • Hi!

    Ich habe angefangen mich in C# einzuarbeiten. Die Sprache gefällt mir sehr gut. Vorher habe ich hauptsächlich in C++ programmiert.

    Meine Fragen:

    Ist es in C# erlaubt, eine Referenz auf eine lokale Variable zurückzugeben?

    class A
    {
        public int[] getarray()
        {
             int[] localarray={10,20,30};
             return localarray;
        }
    }
    
    static void Main()
    {
        A a=new A();
        int[] mainarray=a.getarray();
    }
    

    Sorgt der GC dafür dass "mainarray" keine NULL-Referenz zugewiesen wird? Immerhin wird "localarray" auf dem Stack gespeichert und wird von dort nach Beendigung der Methode "getarray()" wieder gelöscht.

    Strings sind Wertetypen. Normalerweise würde man sie so initialisieren:

    string s="Hallo";
    

    Wieso kann man sie aber auch dynamisch anlegen?

    string s=new string("Hallo");
    


  • Beides falsch 🙂

    Mit

    int[] localarray={10,20,30};
    

    legst du ja ne Int[] Referenz aufn Stack an, die auf nen Int[] Objekt aufn Heap zeigt.

    int[] mainarray=a.getarray();
    

    Damit legst du ne Int[] Referenz aufn Stack mit dem Namen mainarray und weist dieser Referenz den Wert der Referenz die du mit deiner Methode zurückgibst zu.
    Die Referenz mainarray zeigt nun auf das Int[] Objekt das du in der Funktion erstellt hast und das aufm Heap liegt.

    Da geht nirgends was verloren 🙂

    Strings sind Wertetypen

    Nope, Strings sind Referenztypen, auch wenn sie nen bissel anders tun 🙂



  • Danke erstmal!

    1. Stimmt. Arrays sind ja auch Referenztypen.

    Strings sind Wertetypen

    Nope, Strings sind Referenztypen, auch wenn sie nen bissel anders tun 🙂

    Ok,aber wieso kann ich dann

    string s="";
    

    schreiben? Wenn es es Referenztyp ist dann müsste ich doch new benutzen um Speicher auf dem Heap zu allokieren,oder?



  • Machst du auch implizit. Strings werden besonders behandelt. Des ist nen Referenztyp der wie nen Wertetyp in fast allen Belängen behandelt wird. Dadurch dass er noch immutable(unveränderbar) ist, ist der Schein perfekt.


Anmelden zum Antworten