Vui lòng xem mã bên dưới. Tôi hy vọng nó sẽ in 10 hoặc 10 vì tôi đã gọi một cách rõ ràng bộ thu gom rác. Nhưng tôi luôn nhận được 0 hoặc 20 là đầu ra. Tại sao vậy?C# Destructor không hoạt động như mong đợi
void Main()
{
Panda[] forest_panda = new Panda[10];
for(int i=0; i<forest_panda.GetLength(0);i++)
{
forest_panda[i]=new Panda("P1");
}
for(int i=0; i<forest_panda.GetLength(0);i++)
{
forest_panda[i]=new Panda("P1");
}
System.GC.Collect();
Console.WriteLine("Total Pandas created is {0}",Panda.population);
}
class Panda
{
public static int population=0;
public string name;
public Panda(string name)
{
this.name = name;
population = population + 1;
}
~Panda()
{
population = population - 1;
}
}
Xin lưu ý rằng lớp dành cho Main được tạo tự động bởi LINQPad (trình chỉnh sửa đi kèm với cuốn sách "C# 4.0 in a Nutshell"). Tôi mới đến C#.
http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx Hiện tại, nhiều trang đẹp hơn nữa ở trang đầu của blog của Raymond. –
tại sao bạn mong đợi nó in 10 khi bạn tạo 20 Pandas? –
@Rune FS Tôi không mong đợi bộ thứ hai của 10 Pandas được GCed. nhưng bây giờ tôi hiểu rằng nó cũng có thể được GCed vì nó không còn được tham chiếu trong chương trình khi tôi gọi là GC. – Manoj