一、数据类型分类
1、值类型,存储数据本身
| 类型 | 说明 |
|---|---|
| int | 32 位整数 |
| long | 64 位整数 |
| short | 16 位整数 |
| byte | 字节 |
| bool | 布尔值 |
| double | 双精度浮点 |
| float | 单精度浮点 |
| decimal | 高精度小数 |
| char | 单个字符 |
| struct | 结构体 |
| enum | 枚举 |
2、引用类型,存储地址
| 类型 | 说明 |
|---|---|
| string | 字符串 |
| class | 类 |
| array | 数组 |
| object | 所有类型的基类 |
| interface | 接口 |
| delegate | 委托 |
二、值类型
值类型=拷贝数据,值类型作为参数,方法接收到的时参数的副本:
cs
static void Change(int x)
{
x = 100;
}
int a = 10;
Change(a);
Console.WriteLine(a); // 10
三、引用类型
cs
class User
{
public int Age;
}
User u1 = new User { Age = 18 };
User u2 = u1;
u2.Age = 30;
Console.WriteLine(u1.Age); // 30
u1和u2指向同一块内存,修改的是同一个对象。
引用类型作为参数传递:这不是"引用传递",而是"地址的值被拷贝"
cs
static void Change(User user)
{
user.Age = 100;
}
User u = new User { Age = 18 };
Change(u);
Console.WriteLine(u.Age); // 100
四、值类型与引用类型对比
| 对比项 | 值类型 | 引用类型 |
|---|---|---|
| 存储内容 | 数据本身 | 数据地址 |
| 赋值行为 | 拷贝数据 | 拷贝地址 |
| 参数传递 | 值拷贝 | 地址值拷贝 |
| 性能 | 小对象快 | 大对象更合适 |
| 代表 | int / struct | string / class |