数据类型分为值类型(value type)和引用类型(reference type)
值类型
值类型的变量包含类型的值。将新的值分配到值类型的变量时,会复制该值,不能从值类型派生新类型,默认不能为null,使用之前必须初始化。
两种值类型:
- 结构(struct)
- 枚举(enum)
简单类型
简单类型时C#提供的一组预定义的结构类型,
- 整型类型:整数类型和字符型类型
- 浮点类型
- bool
装箱(boxing)和拆箱(unboxing)
官方解释:a value type to behave like an object, a wrapper that make the value like a reference object is allocated on the heap,and the value type's is copied into it. The wrapper is marked so the system knows that it contains a value type.This process is known as boxing,and reverse process is know as unboxing.Boxing and unboxing allow any type to be treated as an object.
普通话:在需要将值类型表现为对象的情况下,将在堆上分配一个包装器使值类型看起来像引用对象,并将值类型的值复制到其中。包装器被标记,以便系统知道它包含一个值类型。这个过程称为装箱,反向过程称为拆箱。装箱和拆箱允许将任何类型视为对象。
白话文:将值类型的变量转换为对象的过程称为装箱,将对象类型的变量转换为值类型的过程称为拆箱。
引用类型
引用类型的变量存储对其数据(对象)的引用,对于引用类型两种变量可饮用同一对象,因此对一个变量执行的操作会影响另一个变量所引用的对象。
声明引用类型:
- class:使用class关键字声明类。
- interface:接口只包含方法、属性、事件或索引器的签名。
- delegate:是一种可用于封装命名方法或匿名方法的引用类型。
内置引用类型
- dynamic:表示变量的使用和对其成员的引用绕过编译时类型检查。
- object: 可以将任何类型的值赋给 object类型的变量。 可以使用文本 null将任何 object变量赋值给其默认值。
- string:表示零个或多个 Unicode 字符的序列。