你已经有了一个简单的类:是一个对象的引用是否为值类型的变量?
public class foo {
public object Property { get; set; }
public void AMethod() {
Property = new object();
object x = Property;
}
}
正如我们所知,物业属性具有保存对象引用一个隐藏的后备字段。问题是:是否支持字段像结构一样处理?
我的意思是分配在堆栈上的x的内存?它是否收集垃圾?或者当方法返回时被释放?
编辑
我的评论,而不是回答的,因为这里的文本太长,以适应评论。
我对x有兴趣。我不知道.Net框架中的任何类名为“ObjectReference”。所有讨论的人都是“我有一个对象的引用”,并且使用引用调用对象的方法。
事实是,对象的引用和对象本身并不是同一个东西。他们都占据不同的记忆块。当你将一个对象作为参数传递给一个方法时,你不会传递该对象,而是引用它。该引用从“ObjectReference”变量复制到堆栈。
参考文献是非常重要的。你不能操纵没有一个的对象;甚至“this”(或者当你访问它内部的对象成员时隐含的“this”)实际上是对象占据的特定内存块的引用。
我不认为很多人对引用作为单独的实体有任何想法。它们无处不在,如果没有它们,你就无法做任何事情。
所以我想要在这里是,如果有一个ObjectReference类,它会是一个结构?它看起来像参考本身的内存被视为一个结构。
x在方法超出范围时被释放。 x基本上持有对当前存储在Property中的对象/值的引用。 – Nkosi
你问'x'还是'Property'?还是“财产”的隐藏支持领域? – mjwills
你显然知道'struct'和“在堆栈上分配”是完全无关的...只是检查...(我的信封估计值将是堆中分配的所有struct的33%) –