在C#的背景:對象引用在哪裏存在,當通過引用傳遞對象引用時會發生什麼?
假設下面的代碼...
public class Foo
{
MrObject object1;
MrObject object2;
MrObject object3;
MrObject object4;
MrStruct struct1;
MrStruct struct2;
MrStruct struct3;
MrStruct struct4;
int i;
public Foo()
{
object1 = new MrObject(1); /// Alpha
object2 = new MrObject(2); /// Bravo
object3 = new MrObject(3); /// Charlie
object4 = new MrObject(4); /// Delta
i = 1;
InitializeComponent(); // POINT A
ByValByRef(object1, ref object2);
}
public void ByValByRef(MrObject o1, ref MrObject o2)
{
o1.foo = 5; // POINT B
o1 = object3; // POINT C
o2.foo = 6; // POINT D
o2 = object4; // POINT E
return;
}
我的理解是,在// A點 - 你已經創建的MyObject的四個實例。這四個實例存在於堆中。 - 你有四個引用這些實例。 問題1:他們住在哪裏?
我的理解是在// POINT B - 您已經創建了一個名爲'o1'的'Alpha'的新參考。該引用被添加到並在棧上生存。當方法返回時,該引用被刪除。
- 您有一個名爲'o2'的參考。 問題2:這是一個新的參考,被添加到並在棧上生活並引用'object2'引用?或者'o2'只是代碼中維護的別名(而不是內存),實際上內存中仍然只有一個引用'Bravo',稱爲'object2',當這段代碼實際執行時,'o2.foo'被處理作爲'object2.foo'?
完美答案 - 謝謝! – chopperdave 2012-02-29 00:01:16