C# 中有两种类型:值类型 (value type) 和引用类型 (reference type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己的数据副本(除 ref 和 out 参数变量外),因此对一个变量的操作不可能影响另一个变量。
C# 的值类型进一步划分为简单类型 (simple type)、枚举类型 (enum type) 和结构类型 (struct type),C# 的引用类型进一步划分为类类型 (class type)、接口类型 (interface type)、数组类型 (array type) 和委托类型 (delegate type)。
类别 | 说明 | |
值类型 | 简单类型 | 有符号整型: sbyte, short, int, long |
无符号整型: byte, ushort, uint, ulong | ||
Unicode 字符: char | ||
IEEE 浮点型: float, double | ||
高精度小数: decimal | ||
布尔型: bool | ||
枚举类型 | enum E {...} 形式的用户定义的类型 | |
结构类型 | struct S {...} 形式的用户定义的类型 | |
引用类型 | 类类型 | 所有其他类型的最终基类: object |
Unicode 字符串: string | ||
class C {...} 形式的用户定义的类型 | ||
接口类型 | interface I {...} 形式的用户定义的类型 | |
数组类型 | 一维和多维数组,例如 int[] 和 int[,] | |
委托类型 | delegate T D(...) 形式的用户定义的类型 |
八种整型类型分别支持 8 位、16 位、32 位和 64 位整数值的有符号和无符号的形式。
两种浮点类型:float 和 double,分别使用 32 位单精度和 64 位双精度的 IEEE 754 格式表示。
decimal 类型是 128 位的数据类型,适合用于财务计算和货币计算。
C# 的 bool 类型用于表示布尔值 — 为 true 或者 false 的值。
在 C# 中,字符和字符串处理使用 Unicode 编码。char 类型表示一个 16 位 Unicode 编码单元,string 类型表示 16 位 Unicode 编码单元的序列。
下表总结了 C# 的数值类型。
类别 | 位数 | 类型 | 范围/精度 |
有符号整型 | 8 | sbyte | –128...127 |
16 | short | –32,768...32,767 | |
32 | int | –2,147,483,648...2,147,483,647 | |
64 | long | –9,223,372,036,854,775,808...9,223,372,036,854,775,807 | |
无符号整型 | 8 | byte | 0...255 |
16 | ushort | 0...65,535 | |
32 | uint | 0...4,294,967,295 | |
64 | ulong | 0...18,446,744,073,709,551,615 | |
浮点数 | 32 | float | 1.5 × 10−45 至 3.4 × 1038,7 位精度 |
64 | double | 5.0 × 10−324 至 1.7 × 10308,15 位精度 | |
小数 | 128 | decimal | 1.0 × 10−28 至 7.9 × 1028,28 位精度 |