代码之家  ›  专栏  ›  技术社区  ›  odiseh

它的意思是:使用C,在循环中实例化同名对象?

  •  0
  • odiseh  · 技术社区  · 14 年前
    ....
    ....
    Employee employeeInfo;
    for(int i =0; i<n;++i)
    {
       employeeInfo = new Employee();
       employeeInfo.FirstName = arr[i].ToString();
       employeeInfo.Age = i;
       employeeList.Add(employeeInfo);
        .... 
    }
    
    5 回复  |  直到 14 年前
        1
  •  5
  •   Guffa    14 年前

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

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

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

        2
  •  0
  •   Upul Bandara    14 年前

    根据您的代码片段:

    在每次迭代中,您都创建一个新对象和上一个对象,由引用 employeeInfo 将有资格参加GC。

        3
  •  0
  •   Victor Hurdugaci    14 年前

    如果您不使用创建的EmployeeInfo执行任何其他操作,则意味着您正在执行一些无用的操作-创建未使用的对象=>丢失分配内存的时间

        4
  •  0
  •   Kamran Khan    14 年前
    employeeInfo = new Employee();//this is where you are "instantiating objects with the same name" in your for loop. 
    

    每次调用此loc时,EmployeeInfo对象中以前的值都会替换为对象的初始状态;这意味着 新的 调用,则EmployeeInfo的属性/变量应替换为默认值(由构造函数提供,如果有)。

        5
  •  0
  •   gavit Jeff Hines    14 年前

    将变量视为一个框。在框中放置一个新的Employee(),给它命名,然后将其添加到某个集合中。在循环的下一个迭代中,您放置翻转框(丢弃对前一个雇员的引用,但这并不重要,因为您的集合仍然具有引用),并在框中添加新的employee()。任何不在盒子里的东西都会被垃圾收集器清理干净。