它是什么意思:使用c#,在循环中实例化具有相同名称的对象?

时间:2010-01-04 08:02:53

标签: c# object

....
....
Employee employeeInfo;
for(int i =0; i<n;++i)
{
   employeeInfo = new Employee();
   employeeInfo.FirstName = arr[i].ToString();
   employeeInfo.Age = i;
   employeeList.Add(employeeInfo);
    .... 
}

5 个答案:

答案 0 :(得分:5)

对象没有名称。你拥有的是一个局部变量,它是对象的引用,并且该变量用于创建的每个对象。

您可以使用局部变量来跟踪当前对象,稍后在循环中将对象存储在集合中。

如果不在某处存储每个对象,则在将下一个对象分配给变量时,前一个对象将丢失。上一个对象仍然存在,但由于不再引用它,稍后垃圾收集器将删除它。

答案 1 :(得分:0)

根据您的代码段:

在每次迭代中,您创建一个新对象和前一个对象,由employeeInfo引用 将有资格获得GC。

答案 2 :(得分:0)

如果您没有对您创建的employeeInfo执行任何其他操作,那么意味着您正在做一些无用的事情 - 创建未使用的对象=&gt;浪费时间分配内存

答案 3 :(得分:0)

employeeInfo = new Employee();//this is where you are "instantiating objects with the same name" in your for loop. 

每次调用此loc时,employeeInfo对象中的先前值都将替换为对象的初始状态;这意味着当调用 new 时,employeeInfo的属性/变量将被默认值替换(由构造函数提供,如果有的话)。

答案 4 :(得分:0)

将变量视为一个框。您在框中放置一个新的Employee(),为其命名,将其添加到某个集合中。在循环的下一次迭代中,你放置框(抛弃对前一个Employee的引用,但这并不重要,因为你的集合仍然有引用)并在框中添加一个新的Employee()。垃圾收集器将清除任何不在盒子里的东西