你有一个简单的课程:
public class foo {
public object Property { get; set; }
public void AMethod() {
Property = new object();
object x = Property;
}
}
我们知道,Property属性有一个隐藏的支持字段,用于保存对象引用。问题是:支持字段是否像结构一样处理?
我的意思是在堆栈上分配x的内存?是垃圾收集了吗?或者在方法返回时释放?
修改
我在此处回复而不是在评论中,因为文字太长而无法放入评论中。
我对x很感兴趣。我不知道.Net框架中的任何类叫做#34; ObjectReference"。所有人都谈论的是"我有一个对象"的引用,你使用引用调用对象的方法。
事实上,对象和对象本身的引用不是1&同一件事情。它们都占据了不同的记忆块。将对象作为参数传递给方法时,您不会传递对象,而是传递对象。该引用是从" ObjectReference"复制的。变量到堆栈。参考文献非常重要。你不能操纵一个物体;甚至"这个" (或者暗示"这个"当你访问它内部的对象成员时)实际上是对象所占用的特定内存块的引用。
我不认为很多人会将参考作为单独的实体。它们无处不在,如果没有它们,你就无法完成任何事情。
所以我试图在这里得到的是,如果有一个ObjectReference类,它会是一个结构吗?看起来像引用本身的内存被视为结构。
答案 0 :(得分:2)
我的意思是在堆栈上分配
x
的内存?
是的,保存对x
的引用的object
的内存被分配在堆栈上 - 非常类似于拥有它们的语言中的指针。
是否收集垃圾?或者在方法返回时释放?
一旦方法返回,就会立即释放引用本身的内存。如果x
是其对象的最后一个实时引用,那么引用的对象就有资格进行垃圾回收。