C# 数据类型分为 值类型、引用类型 和 特殊类型,以下是详细分类及对应范围/说明:
一、值类型(Value Types)
值类型直接存储数据,分配在栈内存中,默认不可为 null。
- 简单类型
- 整数类型(有符号与无符号)
类型 | 范围(含符号) | 位数 |
---|---|---|
sbyte | -128 到 127 | 8位 |
byte | 0 到 255 | 8位 |
short | -32,768 到 32,767 | 16位 |
ushort | 0 到 65,535 | 16位 |
int | -2,147,483,648 到 2,147,483,647 | 32位 |
uint | 0 到 4,294,967,295 | 32位 |
long | -9.2×10^18 到 9.2×10^18 | 64位 |
ulong | 0 到 1.8×10^19 | 64位 |
- 浮点与高精度类型
类型 | 范围(含符号) | 位数 |
---|---|---|
float | 32位单精度(约6-9位小数) | 32位 |
double | 64位双精度(约15-17位小数) | 64位 |
decimal | 128位十进制(无舍入误差,金融计算) | 128位 |
- 其他类型
类型 | 说明 |
---|---|
bool | 逻辑值 true/false(非0不自动转true) |
char | 16位 Unicode 字符(如 'A'、'中') |
- 枚举类型(Enum)
- 用户自定义的命名整数常量集合:
csharp
enum Week { Monday, Tuesday }
结构体类型(Struct)
- 封装多个相关变量的轻量类型:
csharp
struct Point { public int X; public int Y; }
二、引用类型(Reference Types)
引用类型存储数据地址,分配在堆内存中,可赋值为 null。
- 类(Class)
- 基础引用类型(如 object、自定义类)
- 数组(Array)
- 同类型元素的集合(如 int[] arr = {1, 2, 3};)
- 字符串(String)
- 不可变的字符序列(如 string s = "Hello";)
- 接口(Interface)
- 定义方法契约(如 IDisposable)
- 委托(Delegate)
- 封装方法引用(类似函数指针)
- 动态类型(Dynamic)
- 运行时解析类型(如 dynamic obj = 10;)
三、特殊类型
- 可空类型(Nullable)
- 允许值类型赋值为 null(如 int? num = null;)。
- 指针类型(Pointer)
- 用于非安全代码操作内存地址(需 unsafe 块)。
关键注意事项
- 浮点精度问题
- float/double 可能存在舍入误差,decimal 适用于精确计算。
- 可空类型安全访问
- 需通过 Nullable.HasValue 和 Nullable.Value 操作。
- 字符串不可变性
- 频繁修改字符串建议使用 StringBuilder。