“是什么意思?”;拳击“;在C#(与Java相反)中?

“是什么意思?”;拳击“;在C#(与Java相反)中?,java,c#,Java,C#,我在Java背景下学习C#,对ValueTypes有些困惑。通过阅读MSDN的概述,我的理解是,原语是对象,而不是包装器。如果是这样的话,为什么要调用方法呢?看起来它们的意思与Java的自动装箱不同,但我不确定是什么意思。它看起来更像铸造。装箱在Java和C#中是非常相似的概念。区别在于发生的时间: Character ch = 'a'; 这将在Java中导致装箱,因为“a”是基元,字符是类(包装器)。 在C#中: 不会导致装箱,因为Char不是基元类型,而是值类型类。要在C#中引发装箱,需要

我在Java背景下学习C#,对
ValueType
s有些困惑。通过阅读MSDN的概述,我的理解是,原语是对象,而不是包装器。如果是这样的话,为什么要调用方法呢?看起来它们的意思与Java的自动装箱不同,但我不确定是什么意思。它看起来更像铸造。

装箱在Java和C#中是非常相似的概念。区别在于发生的时间:

Character ch = 'a';
这将在Java中导致装箱,因为“a”是基元,字符是类(包装器)。 在C#中:

不会导致装箱,因为
Char
不是基元类型,而是值类型类。要在C#中引发装箱,需要将值类型的对象强制转换为
object
reference

object o = 'a';

编辑:正如HighCore在评论中提到的,C#中的装箱机制有着重要的含义。将内容放入
列表
不会导致装箱,将内容取出不会导致拆箱,因为int列表是真正的未装箱int列表。

我认为对一个来自java的新手来说,同样重要的是,C#的泛型设计正确,没有“类型擦除”这样的事情他可能习惯了java中的其他讨厌的东西,创建
列表在C#中是完全有效的。
object o = 'a';