Ich habe gekämpft, um zu verstehen, was mit einer Methode vor sich geht, die ich für meinen Test verstehen muss, ich habe eine harte Zeit, den Grund herauszufinden, warum ich die Ergebnisse erhalte, die ich erhalte, jede Erklärung darüber, wie die "f"-Methode funktioniert, wird sehr geschätzt
class Program {
static void Main(string[] args)
{
A b = new A(); b.y = b.x;
b.f(b.y); b.g();
Console.WriteLine(b.x[0] + " " + b.x[1]); // Prints 1 7
Console.WriteLine(b.y[0] + " " + (b.x[1] + b.y[1])); // 1 14
}
}
public class A {
public int[] x = {1, 2};
public int[] y;
public void f(int[] z)
{
z[1] += 5;
}
public void g()
{
A a = new A ();
a.x[0]++;
a.x[1]--;
}
}
Lassen Sie mich erklären, was ich verstanden habe, b.y wird als ein Array erstellt und es erhält die Werte in b.x, jetzt, wenn wir b.f aufrufen, übergeben wir diese Methode b.y, die [1, 2] ist, jetzt, und hier ist, wo ich stecken bleiben, z scheint die b zu sein. y Array zu sein, also hat es [1, 2] als Wert, wenn die Methode 5 zu dem Element an der Position 1 (was 2 ist) addiert, erhalte ich [1, 7] als Ergebnis davon, wenn die Methode endet und mein Programm zurück zum Main geht, sind irgendwie b.y UND b.x BEIDE jetzt [1, 7], wie ist das passiert? Ich dachte, die Methode würde nur b.y ändern, da es das ist, was übergeben wurde. Außerdem fügt die g-Funktion nichts hinzu, da der "a"-Wert eine lokale Variable ist, die "stirbt", wenn die Methode endet, richtig? Ich hoffe, jemand kann mir helfen, ich muss diesen Test bestehen!. Danke ;]