以下代码段中Employee实例的生命周期会发生什么变化?
Department dept = new Employee(10).GetDepartment();
创建Employee类,但不将其分配给任何变量。在这种情况下,Employee实例的持续时间是多久?
这样做有任何负面影响吗?
答案 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%的时间不需要也不应该这样做。