对类型的隐式转换是否涉及拳击?
示例:
HttpClient client = new HttpClient();
object o = client;
IDisposable d = client;
如果是这样,拳击参考类型与拳击值类型的性能是否会受到影响?
答案 0 :(得分:4)
拳击仅将 应用于值类型。
您的示例中没有任何内容可以演示拳击。您只执行了引用类型的转换。
来自MSDN:
Boxing是将value type转换为
object
类型或由此值类型实现的任何接口类型的过程。
答案 1 :(得分:2)
Boxing包括将值类型的数据从堆栈传输到堆的过程。这是性能影响的来源。由于引用类型的数据已经位于堆上,因此该过程与引用类型无关。
您的示例显示了引用类型的多态性。这不涉及装箱过程,并且在构建项目时已经完成,因此在运行时没有性能损失。
答案 2 :(得分:1)
您无法选择参考类型。这不可能。拳击只适用于价值类型。
如果您将值类型放入类型object
的变量或它实现的接口,那么您就是拳击。这种转换通常是隐含的,是的。
答案 3 :(得分:1)
将值类型转换为引用类型时会发生装箱/取消装箱。如果两种类型都是引用类型,则不会发生装箱/取消装箱。