2011-04-02 54 views
3

如果我使用非泛型集合,函数等等,然后传递值类型将被框,因为铸造到Object(这不利于性能)。但是,在将泛型包含在C#2.0中之后,大多数传递值类型的情况都被废除了,如Object使用对象,而不是泛型

主管仍然有任何情况下,它是不可能用泛型完成的东西,仍然需要使用铸造到Object?如果可以,请举个例子吗?谢谢。

+0

值得注意的是,在很多情况下,即使使用泛型,拳击仍然会出现在值类型中。在大多数情况下,您从中受到的性能影响是微不足道的,因此它不是真正的问题。 – 2011-04-02 08:50:59

+0

@Dan Puzey,在1行代码中 - 是的。但是把这条线放到运行几千次的循环中,你会看到它是微不足道的...... – 2011-04-02 09:30:42

回答

6

使用System.Object提供了灵活性(以性能为代价)。

考虑ASP.NET(会话和应用程序)的存储机制,他们有

Dictionary<string, object> PropertyBag; 

的总体结构和你会使用他们喜欢

PropertyBag["currentCustomer"] = aCustmer; 
PropertyBag["visits"] = 0; 

这是不可能取代object在这里输入更强的东西。

4

是否仍有能力在任何编程的情况下这是不可能实现与仿制药的东西,还需要使用铸造对象

当然有。例如,在编译时你不知道类型的情况,你需要使用反射。但如果您在编译时知道类型,那么使用泛型进行强类型更好。