将对象设置为null有什么作用?

时间:2013-04-08 02:54:32

标签: c#

这行代码在堆上为对象foo

分配一个内存空间
var foo =new object();

这行代码会释放它吗?

foo=null;

或者只是消除对堆上内存位置的引用。

2 个答案:

答案 0 :(得分:3)

它只是删除了引用。当运行时认为适合时,对象本身是垃圾收集的,并且实际上与是否擦除引用无关。

答案 1 :(得分:2)

在C#中,所有对象都是垃圾回收的,你不能“删除”它们。

当对给定对象的最后一次引用超出范围时,该对象容易受到攻击 采集。你可以找到尽可能多的引用,但是 只要任何引用仍然保持该对象,该对象将保持活动状态 对象

因此设置foo=null;只会删除引用。

  

垃圾收集包括以下步骤:

     
      
  1. 垃圾收集器搜索所管理的对象   在托管代码中引用。
  2.   
  3. 垃圾收集器尝试最终确定不是的对象   引用。
  4.   
  5. 垃圾收集器释放未引用的对象   回忆起他们的记忆。
  6.   

了解垃圾收集器的工作方式非常重要GC Class

实施例

// Set a break-point here to see that foo = null. 
// However, the compiler considers it "unassigned." 
// and generates a compiler error if you try to 
// use the variable.
object foo;
// Now foo has a value.
foo = new object();
// Set foo to null again. The object it referenced 
// is no longer accessible and can now be garbage-collected.
foo = null;