C# 对象是否为全局null?

C# 对象是否为全局null?,c#,java,asp.net,.net,C#,Java,Asp.net,.net,我有一个代码,如下所示。我在一次采访中被问到 object global; void f() { object local=new object(); global=local; } 他问:“全局null是否在函数之外?”。由于local变量失去了其在函数之外的作用域,并且它的引用被赋予了global,因此它也应该是null,但这不是为什么?您必须区分变量和值 局部变量只存在于函数内部,但这并不意味着变量包含的值不存在于函数外部 当您将local的值指定给global时,您正在复制对对

我有一个代码,如下所示。我在一次采访中被问到

object global;
void f()
{
  object local=new object();
  global=local;
}

他问:“全局
null
是否在函数之外?”。由于
local
变量失去了其在函数之外的作用域,并且它的引用被赋予了
global
,因此它也应该是
null
,但这不是为什么?

您必须区分变量和值

局部变量只存在于函数内部,但这并不意味着变量包含的值不存在于函数外部


当您将
local
的值指定给
global
时,您正在复制对对象的引用,以便对同一对象有两个引用。离开函数时,局部变量会消失,但复制到全局变量的值仍然存在,并且对象仍然存在,因为仍然有对它的引用。

我对这个问题做了大量研究,发现这种行为的唯一原因是.Net垃圾收集

GC根本身不是对象,而是对对象的引用。GC根目录引用的任何对象都将在下一次垃圾收集中自动生存

因为local是一个局部变量,所以它将留在GC根中,因为它被global引用,所以它在GC中生存。 您可以在中获得更多信息


除非调用
f()
global
将保持空值。如果函数运行,global将获取local的值,即使在函数结束后也将保留该值。如果不是,全局是NuleEAH函数被称为为什么全局不是零,如果它是C++,则面试官就没有一点,因为新的操作符创建对象不是堆栈,而是堆。@伤害:我想什么,但是我宁愿不声称我知道任何关于C++的知识;P