保存对象引用的变量是值类型吗?

时间:2017-08-17 01:49:59

标签: c# .net

你有一个简单的课程:

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类,它会是一个结构吗?看起来像引用本身的内存被视为结构。

1 个答案:

答案 0 :(得分:2)

  

我的意思是在堆栈上分配x的内存?

是的,保存对x的引用的object的内存被分配在堆栈上 - 非常类似于拥有它们的语言中的指针。

  

是否收集垃圾?或者在方法返回时释放?

一旦方法返回,就会立即释放引用本身的内存。如果x是其对象的最后一个实时引用,那么引用的对象就有资格进行垃圾回收。