Laden...

Array-Elemente werden bei Methoden-Aufruf geändert

Erstellt von LUKX vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.850 Views
L
LUKX Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren
Array-Elemente werden bei Methoden-Aufruf geändert

Hallo zusammen,

ich versuche mir aktuell ein wenig C# beizubringen. Leider habe ich ein kleines Verständnis Problem bei einer Aufgabe aus meinem Übungsbuch. Folgende Methode ist mir leider nicht ganz verständlich:


 private void CmdEinDimFeld_Click(object sender, EventArgs e)
        {
            int[] p = { 6, 7, 2 };

            Verdoppeln(p);
            LblAnzeige.Text = "";
            foreach (int z in p)
                LblAnzeige.Text += z + " ";
        }

        private void Verdoppeln(int[] x)
        {
            for (int i = 0; i < x.Length; i++)
                x[i] = x[i] * 2;
        }

Wieso wirkt sich die Methode Verdoppeln auf die Originalwerte aus? In der Methode wird doch kein ref oder return angeben.

Vielen Dank schon mal für eure Hilfe.

Lukx

Hinweis von gfoidl vor 6 Jahren

Bitte passendere Titel wählen. "Methoden" sagt nicht viel über das Problem aus.
Klar kann das schwierig sein, v.a. zu Beginn, aber im Titel sollte das Problem schon hervorgehen. Siehe auch [Hinweis] Wie poste ich richtig? Punkt 3.

L
95 Beiträge seit 2009
vor 6 Jahren

Hallo,
das liegt daran, dass ein Array ein Referenztyp ist: Arrays (C#-Programmierhandbuch)

D.h. wenn du eine Methode hast du ein Array annimmt übergibst du ihr eine Referenz auf das Array und eben keine komplette Kopie des Arrays.
(So wie wenn du in C++ einen Pointer übergibst. Da übergibst du zwar die Kopie des Pointers aber der Speicherbereich auf den der Pointer zeigt ist der selbe)

W
198 Beiträge seit 2008
vor 6 Jahren

Übergeben wird ein Array. Die Methode manipuliert die Werte in diesem Array.

Es gibt in C# Objekte, die 'per value' (dazu zählen Objekte von Klassen wie int, string etc. - mehr dazu findest Du hier C# - Data Types) und Objekte die 'per reference' übergeben werden (Objekte aller anderen Klassen wie eben auch Arrays).

L
LUKX Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren

Danke für eure Antworten, das hat mir weiter geholfen.

Vielen Dank!

Lukx

M
368 Beiträge seit 2006
vor 6 Jahren

Zum Thema "ref" noch ein Verweis auf einen aktuellen Artikel der DotNetPro: http://www.dotnetpro.de/core/c/c-7-richtige-einsatz-ref-1218566.html

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉