带参考类型的拳击和隐式转换

时间:2013-11-18 21:39:56

标签: c# reference boxing

对类型的隐式转换是否涉及拳击?

示例:

HttpClient client = new HttpClient();
object o = client;
IDisposable d = client;

如果是这样,拳击参考类型与拳击值类型的性能是否会受到影响?

4 个答案:

答案 0 :(得分:4)

拳击仅将 应用于值类型。

您的示例中没有任何内容可以演示拳击。您只执行了引用类型的转换。

来自MSDN

  

Boxing是将value type转换为object类型或由此值类型实现的任何接口类型的过程。

答案 1 :(得分:2)

Boxing包括将值类型的数据从堆栈传输到堆的过程。这是性能影响的来源。由于引用类型的数据已经位于堆上,因此该过程与引用类型无关。
您的示例显示了引用类型的多态性。这不涉及装箱过程,并且在构建项目时已经完成,因此在运行时没有性能损失。

答案 2 :(得分:1)

您无法选择参考类型。这不可能。拳击只适用于价值类型。

如果您将值类型放入类型object的变量或它实现的接口,那么您就是拳击。这种转换通常是隐含的,是的。

答案 3 :(得分:1)

将值类型转换为引用类型时会发生装箱/取消装箱。如果两种类型都是引用类型,则不会发生装箱/取消装箱。