Kopie oder Referenz?



  • um mich ein bisschen mit den eigenarten von c# vertraut zu machen, habe ich eine testklasse erstellt:

    using System.Windows.Forms; // für messagebox
    
    namespace test
    {
        public class Test
        {
            string[] s = new string[] { "s1", "s2", "s3" };
    
            public Test()
            {
                MessageBox.Show(s[0] + s[1] + s[2]); // nur so, funktionstest, funzt.
            }
    
            public string[] GetStringArray()
            {
                return s;
            }
        }
    }
    

    in einem anderen form erstelle ich das objekt und rufe über dieses objekt GetStringArray auf:

    Test test = new Test();
    string[] s = test.GetStringArray();
    

    was passiert hier? wird eine tiefe kopie erzeugt?
    wenn ja, kann ich GetStringArray so schreiben, dass nur eine referenz zurückgegeben wird?



  • Du bekommst eine 2. Referenz auf dein String-Array "s" zurück.



  • ok, das heisst s[0] = "xyz" ändert den member! kann ich das irgendwie unveränderbar machen? hab schon was mit const probiert, krieg aber nen error

    public const string[] GetStringArray()
    

    Fehler 3 Ungültiges Token "{" in Klasse, Struktur oder Schnittstellenmemberdeklaration. E:\dot.net\SimpleSerialCS2\SimpleSerial\test.cs 15 9 SimpleSerial

    public string[] const GetStringArray()
    

    Fehler 1 Ungültiges Token "const" in Klasse, Struktur oder Schnittstellenmemberdeklaration. E:\dot.net\SimpleSerialCS2\SimpleSerial\test.cs 14 25 SimpleSerial

    😕



  • Du könntest ne ReadOnlyCollection zurück geben.



  • vielen dank für den tip!


Log in to reply