1-值类型和引用类型
| 值类型 | 引用类型 | |
|---|---|---|
| 比喻 | 复印一份文件,你改你的,我改我的 | 给一把钥匙,大家开的是同一扇门 |
| 存储 | 数据直接存在变量里 | 变量存的是"地址",真正的数据在别处 |
| 常见类型 | int bool double struct |
class string 数组 List |
————————————————————————————————————————————————————————————————————————————————————————————————
案例 1:值类型(int)
csharp
int a = 10;
int b = a; // b 复制了 a 的值(复印件)
b = 20;
Console.WriteLine($"a={a}, b={b}");
输出:a=10, b=20
改 b 不影响 a,因为它们是独立的两份数据
————————————————————————————————————————————————————————————————————————————————————————————————
案例 2:引用类型(数组)
csharp
int[] arr1 = new int[] { 1, 2, 3 };
int[] arr2 = arr1; // arr2 拿到了 arr1 的"钥匙"
arr2[0] = 999;
Console.WriteLine($"arr1[0]={arr1[0]}");
输出:arr1[0]=999
改 arr2 居然把 arr1 也改了!因为指向同一份数据
————————————————————————————————————————————————————————————————————————————————————————————————
案例 3:方法传参的区别
csharp
void ChangeValue(int x) { x = 100; }
void ChangeRef(int[] arr) { arr[0] = 100; }
int num = 1;
ChangeValue(num); // 传的是复印件
Console.WriteLine(num); // 输出:1(没变!)
int[] nums = { 1, 2, 3 };
ChangeRef(nums); // 传的是钥匙
Console.WriteLine(nums[0]); // 输出:100(变了!)

浙公网安备 33010602011771号