1.5 KiB
1.5 KiB
值类型和引用类型
概念:
- C# 的类型大体分成两类:==值类型== 和 ==引用类型==
- 值类型变量通常==直接保存数据本身==
- 引用类型变量保存的是==对象的引用(地址)==
常见类型:
- 值类型:数值类型、
bool、char、enum、struct - 引用类型:
string、数组、类、接口、委托、object、dynamic
默认值:
- 数值类型默认值一般是
0 bool默认值是falsechar默认值是'\0'enum默认值是(枚举类型)0- 引用类型默认值一般是
null
使用区别:
- 赋值时
- 值类型:复制的是数据本身
- 引用类型:复制的是引用
- 传参时
- 默认也遵循上面的规则
- 所以值类型通常是“传一份副本”
- 引用类型通常是“传一份引用”
案例: 值类型:
static void ChangeValue(int value)
{
value = 99;
}
int a = 1;
ChangeValue(a);
Console.WriteLine(a); // 1
引用类型:
static void ChangeValue(int[] value)
{
value[0] = 99;
}
int[] a = { 1 };
ChangeValue(a);
Console.WriteLine(a[0]); // 99
注意:
- ==数组是引用类型,不是值类型==
- ==string 也是引用类型==,但它有“不可变”特性
- “值类型在栈上、引用类型在堆上”只是初学时的简化理解,==不适合当成绝对规则==
- 更稳的记法是:
- 值类型变量保存值
- 引用类型变量保存引用
- 如果想让方法直接改外部变量本身,要继续看ref和out
#基础