铸造物体的昂贵程度如何?

可能重复:
TypeCasting的性能

作为另一个对象投射对象有多昂贵?

CustomClass instance = GenericObject as CustomClass 

是否应该避免所有费用?

想看看别人怎么想这个。 我确信这是非常情绪化的。

您应该避免担心特定语言function对性能的影响,除非您有特定的证据(测量)它们确实导致了问题。

您主要关心的应该是代码的正确性和可维护性。

然而,作为一般观察,通过适当地应用良好的OO编程实践和使用generics(特别是集合),C#中通常可以避免不必要的转换。 在你确实需要执行强制转换的情况下,除非你在紧密的循环中或者使用可能引发无效强制转换exception的类型,否则它不太可能成为性能瓶颈。

大多数现实世界的性能问题都来自算法选择或缺乏对平台本身的认识 – 而不是来自特定的语言特征。

不,不应该不惜一切代价避免。 铸造不是很贵。 当然,如果你有一个每秒运行一百万次的循环,那么避免强制转换以保存一些性能可能是有意义的,否则它不会真正导致性能问题。

铸造的真正问题在于它的作弊类型安全性。 如果你不小心,如果你把所有的东西都扔到了地方,那么引入错误或降低代码的可读性并不是很难。

如果你可以使用generics,那么它比铸造更好。 拳击和拆箱是一项昂贵的操作,如果可能应该避免。 问题有时候是无法避免的。

另外在这里提到的另一个答案是,与特定的性能问题或代码可维护性相比,担心拳击是非常微不足道的。 我完全同意这一点。

通常,在特定的基础上铸造物体的成本在大规模的物品中是低的。 但是,如果您反复多次构建对象,那么当您发现它是性能问题的原因时应该尝试避免它。

毕竟,从.NET 1.1到2.0的一个主要改进是generics的引入 – 这解决了强类型对象列表的问题(例如,ArrayList =基于对象,List =类型列表)