创建整数集合的.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];
装箱的价格(据我了解)是需要在堆上创建一个对象,将分配给堆栈的整数复制到新对象,反之亦然。
泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我想不是这样,因为当超出范围时会发生什么)?似乎仍然需要将其复制到堆栈中的其他位置。
到底是怎么回事?