Hallo ocram1
mittels
newArr = Arr; erzeugst du
kein neues Array, sondern newArr ist nun einfach eine weitere Referenz auf das vorhandene Array (welches schon durch die Variable Arr referenziert wird).
Bei Wertetypen (wie int, short, long oder auch Strukturen) wird dagegen immer eine Kopie angelegt, so daß eine Änderung des Originalwertes keinen Einfluß auf die Kopie hat.
Der Unterschied zwischen Referenz- und Wertetyp ist entscheidend für das Verständnis von C# (bzw. .NET).
Wenn du wirklich ein neues Array haben willst, so mußt du dies auch anlegen, d.h.
C#-Quelltext
1:
| int[] newArr = new int[Arr.Length]; |
Um dann auch die Inhalte des Original-Arrays dort reinzukopieren, könnte man z.B. dann die Array.CopyTo()-Methode verwenden:
C#-Quelltext
1:
| Array.CopyTo(Arr, newArr, Arr.Length); |
Explizit für Arrays gibt es aber auch die Array.Clone()-Methode, welches zumindestens für Wertetypen (innerhalb des Arrays) echte Kopien erzeugt, d.h.
C#-Quelltext
1:
| int[] newArr = (int[])Array.Clone(Arr); |
Der Cast
(int[]) ist notwendig, weil Array.Clone beliebige Arrays (d.h. unterschiedlicher Typen) kopieren kann.
Bei dieser Art von Kopie spricht man auch von "flacher Kopie", da bei Referenztypen innerhalb des Arrays nur das Array selber kopiert werden würde (nicht aber die Elemente innerhalb des Arrays) - im Gegensatz zu einer "tiefen Kopie".
Ich hoffe, ich konnte dir damit diese Frage sinnvoll beantworten - und habe dich (als C#-Anfänger) nicht noch mehr verwirrt?
P.S. Unter
2.3.5 Einfache Datentypen im Buch "Visual C# 2010" gibt es ja auch eine kurze Erklärung bzgl. der Unterschiede von Werte- und Referenztypen (dies hast du wahrscheinlich bisher beim Durchlesen noch nicht als so wichtig erachtet bzw. den konkreten Sinn verstanden).
Mit den technischen Unterschieden (Stack vs. Heap) will ich dich jetzt auch noch gar nicht "quälen", sobald du jedoch weiter im Buch auf "Klassen" und "Objekte" stößt, solltest du dich an den Begriff "Referenztyp" erinnern.
Und schon mal als Ausblick:
Ein wichtige Ausnahme gibt es bei dem Datentyp "string": dieser ist zwar ein Referenztyp, wird jedoch wie ein Wertetyp behandelt. Bei Interesse kannst du dann mal den Artikel
Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik) lesen.