Boxeo y unboxing con genéricos
La forma .NET 1.0 de crear una colección de enteros (por ejemplo) era:
ArrayList list = new ArrayList();
list.Add(i); /* boxing */
int j = (int)list[0]; /* unboxing */
La penalidad de usar esto es la falta de seguridad de tipo y rendimiento debido al boxeo y al desempaquetado.
La forma .NET 2.0 es usar genéricos:
List<int> list = new List<int>();
list.Add(i);
int j = list[0];
El precio del boxeo (a mi entender) es la necesidad de crear un objeto en el montón, copiar el entero asignado a la pila al nuevo objeto y viceversa para el desempaquetado.
¿Cómo supera esto el uso de genéricos? ¿El entero asignado a la pila permanece en la pila y se señala desde el montón (supongo que este no es el caso debido a lo que sucederá cuando salga del alcance)? Parece que todavía hay una necesidad de copiarlo en otro lugar fuera de la pila.
¿Qué pasa en realidad?