NET 1.0创建整数集合的方法(例如)是:
ArrayList list = new ArrayList();
list.Add(i); /* boxing */
int j = (int)list[0]; /* unboxing */
使用这种方法的缺点是由于装箱和拆箱而导致缺乏类型安全性和性能。
NET 2.0的方法是使用泛型:
List<int> list = new List<int>();
list.Add(i);
int j = list[0];
装箱的代价(据我所知)是需要在堆上创建一个对象,将分配的堆栈整数复制到新对象,反之亦然。
泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中被指向(我猜想这不是这种情况,因为当它超出作用域时会发生什么) ?似乎仍然需要将其复制到堆栈的其他地方。
到底发生了什么?