实例在未分配给变量时去哪里?

时间:2014-03-27 23:00:32

标签: .net c#-4.0

以下代码段中Employee实例的生命周期会发生什么变化?

Department dept = new Employee(10).GetDepartment();

创建Employee类,但不将其分配给任何变量。在这种情况下,Employee实例的持续时间是多久?

这样做有任何负面影响吗?

2 个答案:

答案 0 :(得分:2)

它将像任何其他对象一样被垃圾收集。如果没有对该对象的引用,则不会立即为符合条件的用于GC。

请注意GetDepartamet()可能(在这种情况下也会很奇怪)继续引用“员工”:

Department GetDepartment()
{ 
     return new Department { OnlyEmployee = this}
}

是否有任何负面影响:不,除非每次阅读代码时每个人都会问这个确切的问题。

答案 1 :(得分:2)

你可以这样想:

Employee __temp = new Employee(10);
Department dept = __temp.GetDepartment();

这不是真正发生的事情,但它有助于解释正在发生的事情。

在这种情况下,只要__temp完成执行,垃圾收集器就会清除__temp.GetDepartment() elegible 。在下一个垃圾收集周期发生之前,它不会实际被收集,这将在运行时确定必要时发生。 1

编写像

这样的代码
Department dept = new Employee(10).GetDepartment();

只是让您不必自己声明一个中间变量。编写这样的代码没有负面的副作用,这是一种非常常见的做法。

1:有多种方法可以手动强制收集周期,但99.9%的时间不需要也不应该这样做。