Ja, es werden zwei unabhängige Variablen auf dem Stapel liegen. Sie befinden sich auch in zwei verschiedenen Stapelrahmen - einer für main
und eine für foo
(unter der Annahme, dass kein Inlining stattfindet). Wenn Foo
zurückgibt, wird der Wert von x
ist immer noch 1, nicht 5.
In der Tat sind die Argumente つねに wird in C# standardmäßig als Wert übergeben, sowohl für Referenztypen als auch für Werttypen. Der einzige Unterschied besteht darin, dass bei Referenztypen der Argumentwert es eine Referenz - nicht das Objekt selbst.
Siehe meine Artikel zur Parameterübergabe für viele weitere Details zu diesem Thema.
Beachten Sie, dass das tatsächliche Verhalten dessen, was auf den Stapel kommt, eine Umsetzungsdetails Der C#-Compiler muss dafür sorgen, dass sich ein Programm so verhält, wie es in der Spezifikation festgelegt ist, aber das schreibt kein Stack- oder Heap-Verhalten vor. Also x
fait am Ende des Codes den Wert 1 haben, aber ein gültiger C#-Compiler könnte haben beide x
y y
auf dem Haufen.