Estoy haciendo algo de desarrollo de ASP.NET en VS y acabo de encontrar una pequeña sugerencia de código interesante (creo que provienen de coderush pero podría estar equivocado).¿Por qué tendría que llamar a disponer de controles ASP.NET?
Cada vez que estoy creando controles, me dice que debería usar una declaración "using" para ellos. Aunque estoy un poco confundido sobre lo que está pasando aquí. con el uso de mi código es algo como:
using (HtmlTableRow tableRow = new HtmlTableRow())
{
tableRow.Attributes.Add("class", isOddRow ? "OddRow" : "EvenRow");
listingTable.Rows.Add(tableRow);
addCell(tableRow, row, "issueId");
addCell(tableRow, row, "Title");
addCell(tableRow, row, "Type");
addCell(tableRow, row, "Summary");
}
Así que espero que al final de la instrucción using llamará a disponer en el TableRow. Sin embargo, los documentos en la biblioteca de MSDN dicen:
El método Dispose deja el control en un estado inutilizable. Después de llamar al este método, debe liberar todas las referencias del control para que la memoria que estaba ocupando pueda ser reclamada por la recolección de elementos no utilizados.
Así que esperaría que ahora tengo un objeto inutilizable en mi estructura de control por lo que se rompería o no se renderizaría o algo así. Sin embargo, todo parece funcionar bien.
Entonces, ¿qué me pregunto es por qué todos los controles son desechables? ¿Es solo porque algunos de ellos serán y todos desechables significa que una llamada para deshacerse en el nivel superior se puede pasar a todos los controles secundarios recursivamente?
Creo que lo entendería si no fuera por el hecho de que los documentos dicen explícitamente que deshacerse de un control lo hace inutilizable ... ¿Están los documentos simplemente equivocados?
¿Cómo podemos manejar los objetos huérfanos (que @Toby mencionó) si no estamos usando el bloque "usar"? – Lijo