C# 类型体系包含三种类别:值类型,引用类型,指针类型。
值类型的变量存储数据,而引用类型的变量存储对实际数据的引用。引用类型也称为对象。指针类型仅可用于 unsafe 模式。
通过装箱和取消装箱,可以将值类型转换为引用类型,然后再转换回值类型。除了装箱值类型外,无法将引用类型转换为值类型。
1. 值类型
值类型主要由两类组成:结构,枚举。结构分为三类:Numeric(数值)类型,bool,用户定义的结构。Numeric类型又可以分为:整型,浮点型,decimal。
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
所有的值类型均隐式派生自 System.ValueType。
与引用类型不同,不能从值类型派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型无法包含 null 值。然而,可以为 null 的类型功能确实允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。有关值类型的默认值的信息,请参见默认值表。
所有的简单类型(C# 语言的组成部分)均为 .NET Framework 系统类型的别名。例如,int 是 System.Int32 的别名。有关完整的别名列表,请参见 内置类型表(C# 参考)。
2. 引用类型
引用类型的变量又称为对象,可存储对实际数据的引用。用于声明引用类型的关键字有:class,interface,delegate。内置引用类型有:dynamic,object,string。
3. 指针类型
在不安全的上下文中,类型可以是指针类型、值类型或引用类型。
4. void和var
void: 用作方法的返回类型时,void 关键字指定方法不返回值。
var: 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var。隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。