45 尽量减少装箱和拆箱
装箱拆箱操作是为了能够让值类型支持多态等特性。这两个操作都及其影响性能,能避免则避免。
装箱会把值类型转换为引用类型。箱子将分配于堆上,该值的副本会放在箱子的内部。从箱中取数据的时候当然返回的也是值得副本,而非值本身。
装箱有时很隐蔽。当你把值作为object传入某个函数的时候,装箱就悄悄发生了。
1 | // 发生了装箱 |
为了避免发生上面的装箱操作,可以在外头手动把它们转成string。
46 为应用程序创建专门的异常类
在异常处理机制之中,异常的抛出位置和处理位置可能相去甚远,所以应该尽可能地把所有必须信息包含在异常对象中。
何时需要创建自己的异常类呢?当你觉得使用者会为该种类的异常提供一个不同于它者的解决方案时。