Hace poco estuve revisando un artículo sobre recolección de basura y decidí seguirlo y tratar de obtener una mayor comprensión. Codifiqué lo siguiente, jugando con la declaración using
, pero me sorprendieron los resultados ... Esperaba que e.Parent.Name fuera del bloque de uso fuera ka-blooey.C# Pregunta asignación/desasignación de memoria con respecto al alcance
¿Qué está pasando exactamente aquí?
static void Main(string[] args)
{
Employee e = new Employee();
using (Parent p = new Parent())
{
p.Name = "Betsy";
e.Parent = p;
Console.WriteLine(e.Parent.Name);
}
Console.WriteLine(e.Parent.Name);
Console.ReadLine();
}
public class Employee
{
public Parent Parent;
}
public class Parent : IDisposable
{
public string Name;
public void Dispose()
{
Console.WriteLine("Disposing Parent");
}
}
Usted puede estar interesado en el artículo reciente del blog de Raymond Chen [Todo el mundo piensa acerca de la recolección de basura por el camino equivocado] (http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586 .aspx). –