ระหว่างที่อ่านบนอินเทอร์เน็ต ฉันได้เรียนรู้ว่า ตัวแปรคงที่จะมีที่อยู่หน่วยความจำเดียวกันเสมอ ดังนั้นเมื่อคอมไพล์โปรแกรม คอมไพลเลอร์จะตัดสินใจว่าจะกำหนดที่อยู่หน่วยความจำใดให้กับตัวแปรคงที่ การอ่านทำให้ฉันนึกถึงสิ่งที่เกิดขึ้นเมื่อคุณ:
class Foo {}
class Program
{
public static Foo someStaticVar;
static void Main(string[] args)
{
Foo localVariable = new Foo();
int x = 4;
someStaticVar = localVariable; // is someStaticVariable still will have the same address?
}
// variable x will be pushed of the stack
// localVariable will be pushed of the stack
// what happens then with someStatic var?
}
ฉันยังได้เรียนรู้ด้วยว่าเมื่อประกาศตัวแปรภายในเมธอด ตัวแปรเหล่านั้นจะถูกพุชไปที่สแต็กเมื่อสร้างขึ้น และแตกสแต็กออกมาเมื่อเมธอดส่งคืน หากทั้งหมดนั้นเป็นจริง someStaticVar ก็ควรจะหายไป แต่ก็ไม่เป็นเช่นนั้น
ฉันแน่ใจว่าฉันต้องเข้าใจบางอย่างไม่ถูกต้อง หรือบางทีในบรรทัด someStaticVar = localVariable;
กำลังทำการสำเนาวัตถุนั้นในเชิงลึก แต่ฉันสงสัยเพราะมีคำถามมากมายบนอินเทอร์เน็ตเกี่ยวกับวิธีการทำสำเนาวัตถุนั้นในเชิงลึก และพวกมันแตกต่างจากแนวทางนี้มาก