Lea*_*ner 1 .net c# static-members pass-by-reference
我有以下代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在该Test()方法中,局部变量emp引用InstanceManager.Employee对象.然后,我设置emp为null.
InstanceManager.Employee参加null?employee静态变量InstanceManager不是null!为什么?(我希望GetEmployee()在我之后调用此方法时,该方法将创建并返回新的Employee对象emp = null;.)
在此之后:
Employee emp = InstanceManager.GetEmployee();
Run Code Online (Sandbox Code Playgroud)
你的情况如下:

当你这样做时:
emp = null;
Run Code Online (Sandbox Code Playgroud)
之后,你不会改变静态变量employee.您只是设置emp引用另一个(在这种情况下null)"位置".更准确地说 - 你说它不是指向任何东西.静态employee指向它的位置.这条线的效果可以这样形象化:

你在做什么基本上是:
Employee emp = InstanceManager.GetEmployee();
Run Code Online (Sandbox Code Playgroud)
emp现在是对employee实例的引用
emp = null;
Run Code Online (Sandbox Code Playgroud)
emp不再是对employee实例的引用
var name2 = InstanceManager.GetEmployee().Name;
Run Code Online (Sandbox Code Playgroud)
name2现在是对employee.Name实例的引用
你永远不会将null设置为InstanceManager.employee.btw甚至没有一个公共制定者.
| 归档时间: |
|
| 查看次数: |
2795 次 |
| 最近记录: |