【发布时间】:2008-11-20 15:51:17
【问题描述】:
只是想通过阅读this enlightening article by Juval Lowy 来了解泛型
释义.. 当您定义一个 Generic 类定义时,它会被编译成 IL。
- 对于值类型,只要您请求特定的值类型,它就会将 T 替换为您的特定值类型,以获得该特定配置的 IL,例如
MyList<int>好处:没有装箱和拆箱处罚。 - 很好.. 对于引用类型,编译器将定义中的所有 T 实例替换为 Object 并创建用于所有引用类型的 IL。然而,实例是根据实际请求的 ref 类型分配的,例如
MyList<String>
现在我们可以编写带有Object 参数的预泛型方法。泛型声称性能提高了 100%,因为“它避免了在你想使用它时将对象类型向下转换为特定类型时所招致的性能损失”
// assume GetItem returns an Object
string sMyPreciousString = (string) obList.GetItem();
当您从 Object 向下转换为特定引用类型时,这种性能会受到什么影响?此外,似乎向上转换为 Object(即使泛型也会这样做)不会影响性能。为什么?
【问题讨论】: