我已经以下代码:当存储该引用的局部变量设置为空时,为什么静态变量未设置为空?
public class Employee
{
public string Name { get; set; }
}
public class InstanceManager
{
public static Employee employee;
public static Employee GetEmployee()
{
if(employee == null)
{
employee = new Employee {Name = "Tom"};
}
return employee;
}
}
public class TestClass
{
public void Test()
{
Employee emp = InstanceManager.GetEmployee();
var name = emp.Name;
emp = null;
var name2 = InstanceManager.GetEmployee().Name;
}
}
在Test()
方法,局部变量emp
正在引用InstanceManager.Employee
对象。然后,我将emp
设置为null
。
- 这是不是说我将
InstanceManager.Employee
设置为null
? - 如果我调试这段代码,我发现
InstanceManager
的静态变量不是null
!为什么?
(我期待新的员工对象将被创建,当我emp = null;
之后,调用此方法由GetEmployee()
方法返回。)
'emp'是由'GetEmployee()'返回的'Employee'的一个实例。将该对象设置为null对返回对象的方法没有影响。 –
@Jamie Dixon:但'emp'引用'GetEmployee()'返回的对象。那为什么不将InstanceManager的变量设置为null? 'emp'是否持有单独的副本? – Learner