【发布时间】:2013-12-29 10:28:29
【问题描述】:
我有以下代码:
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的employee静态变量不是null!为什么?
(当我在emp = null; 之后调用此方法时,我期望GetEmployee() 方法将创建并返回新的Employee 对象。)
【问题讨论】:
-
emp是Employee的一个实例,由GetEmployee()返回。将该对象设置为 null 不会影响返回该对象的方法。 -
@Jamie Dixon :但是
emp引用了GetEmployee()返回的对象。那么为什么不将InstanceManager的那个变量设置为null呢?emp是否有单独的副本?
标签: c# .net pass-by-reference static-members