解释下面c#代码中发生了什么

本文关键字:发生了 什么 代码 解释 | 更新日期: 2023-09-27 17:49:15

是否创建1000人对象?

public class Person
{
   public string FirstName;  
   public string LastName;    
}
Person person;    
for(int i = 0; i < 1000; i++)
{
    person = new Person();
}

解释下面c#代码中发生了什么

代码创建了1000个person对象,但只保留了对最后创建的对象的引用。所有其他的将在内存中存在一段时间,但未被引用和不可用,因此在某个时刻将被垃圾收集器回收。

(确切地说,给出的代码实际上并没有告诉我们最后一个引用的存活时间。如果person在给定代码之外的任何地方都没有被引用,那么在循环结束后,它也有资格被收集,并且可以在此后的任何时间被收集。

  • 是的,当你调用构造函数1000次时,它会创建1000个对象
  • 由于它们都被分配给相同的变量,只有最后一个实例将在循环后被引用,其余的将在某个时间点被GC收集

这段代码将一个Person实例化为堆1000次。结果999将是垃圾,但最后一个分配给person变量

您创建了1000次新的Person对象。在每个循环中,你将新对象赋值给person变量。变量只能保留一个对象,因此之前创建的所有对象都将丢失(由垃圾收集器)

如果你想创建1000人的对象并将它们分配给其他变量,你应该在c#中使用集合。例如:

Person[] persons = new Person[1000];
for (int i = 0; i < 1000; i++)
{
    persons[i] = new Person();
}