.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];
装箱的代价(据我所知)是需要在堆上创建一个对象,将堆栈分配的整数复制到新对象,反之亦然。
泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我猜不是这种情况,因为当它超出范围时会发生什么)?似乎仍然需要将它复制到堆栈之外的其他地方。
到底发生了什么?