【发布时间】:2012-03-18 11:36:59
【问题描述】:
在 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;
}
我的理解是在 // POINT A - 您已经创建了四个 MyObject 实例。这四个实例位于堆中。 - 您对这些实例有四个引用。 问题 1:他们住在哪里?
我的理解是在 // POINT B
- 您创建了一个名为 'o1' 的对 'Alpha' 的新引用。该引用被添加到堆栈中并存在于堆栈中。当方法返回时,该引用被删除。
- 您有一个名为“o2”的参考。 问题 2: 这是一个新的引用,它被添加到堆栈中并存在于堆栈中并引用“object2”引用?或者“o2”只是在代码中(而不是在内存中)维护的别名,实际上内存中仍然只有一个对“Bravo”的引用,称为“object2”,当这段代码实际执行时,“o2.foo”被处理作为'object2.foo'?
【问题讨论】:
标签: heap-memory ref stack-memory