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
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.
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)
Ü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).
Bei einem Array handelt es sich einen Verweistyp/Referenztyp.
Typen (C#-Referenz)
Verweistypen (C#-Referenz)
Werttypen (C#-Referenz)
Die folgenden links auf die schnelle gefunden.
Referenz- und Wert-Typen: Was ist der Unterschied in .NET?
Wertetyp vs Refernztyp
[Artikel] Parameter-Übergabemechanismen: call by value vs. call by reference (ref/out)
Danke für eure Antworten, das hat mir weiter geholfen.
Vielen Dank!
Lukx
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 😉