我从Java背景开始学习C#,对于ValueType
有些困惑。通过阅读MSDN的C# vs Java概述,我的理解是原始类型是对象而不是具有包装器。如果是这样,为什么需要将它们打包才能调用方法?它们似乎与Java的自动装箱不同,但我不确定具体区别。看起来更像是强制转换。
我从Java背景开始学习C#,对于ValueType
有些困惑。通过阅读MSDN的C# vs Java概述,我的理解是原始类型是对象而不是具有包装器。如果是这样,为什么需要将它们打包才能调用方法?它们似乎与Java的自动装箱不同,但我不确定具体区别。看起来更像是强制转换。
拳击在Java和C#中的概念非常相似,唯一的区别是发生的时间:
Character ch = 'a';
这会在Java中导致装箱,因为'a'是原始类型,而Character是类(包装器)。
在C#中:
Char ch = 'a';
不会导致装箱,因为 Char
不是原始类型,而是值类型的类。要在 C# 中引起装箱,您需要将值类型的对象转换为 object
引用。
object o = 'a';
编辑:正如HighCore在评论中提到的,C#语言中的装箱机制有着重要的含义。将内容放入 List<int>
中不会导致装箱,取出内容也不会导致拆箱,因为List<int>
是真正的未装箱整数列表。
List<int>
是完全有效的。 - Federico Berasategui