我从Java背景学习C#并对ValueType
有些疑惑。我从阅读MSDN的C# vs Java概述中得到的理解是,原语是对象而不是包装器。如果是这样,为什么他们需要boxed来调用方法?看起来他们的意思不同于Java的自动装箱,但我不确定是什么。它看起来更像是铸造。
答案 0 :(得分:10)
拳击是Java和C#中非常相似的概念。不同之处在于它何时发生:
Character ch = 'a';
这将导致Java中的拳击,因为' a'是原始的,字符是类(包装器)。 在C#中:
Char ch = 'a';
不会导致装箱,因为Char
不是原始类型,而是值类型类。要在C#中进行装箱,您需要将值类型的对象强制转换为object
引用。
object o = 'a';
编辑:正如HighCore在评论中所提到的,C#中的拳击机制有重要意义。将内容放入List<int>
并不会导致装箱并取出内容并不会导致取消装箱,因为整数列表是未装箱的整数的真实列表。