相关疑难解决方法(0)

拳击和拆箱与泛型

.NET 1.0创建整数集合的方法(例如)是:

ArrayList list = new ArrayList();
list.Add(i);          /* boxing   */
int j = (int)list[0]; /* unboxing */
Run Code Online (Sandbox Code Playgroud)

使用它的代价是由于装箱和拆箱而缺乏类型安全性和性能.

.NET 2.0方式是使用泛型:

List<int> list = new List<int>();
list.Add(i);
int j = list[0];
Run Code Online (Sandbox Code Playgroud)

拳击的价格(据我所知)是需要在堆上创建一个对象,将堆栈分配的整数复制到新对象,反之亦然,以便取消装箱.

泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我想这不是这种情况,因为当它超出范围时会发生什么)?似乎仍然需要将其复制到堆栈外的其他地方.

真的发生了什么?

.net c# generics boxing unboxing

63
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

boxing ×1

c# ×1

generics ×1

unboxing ×1