Files
My-Notes/笔记/CSharp/基础/值类型和引用类型.md
T
2026-06-21 09:51:55 +08:00

1.5 KiB

值类型和引用类型

概念:

  • C# 的类型大体分成两类:==值类型== 和 ==引用类型==
  • 值类型变量通常==直接保存数据本身==
  • 引用类型变量保存的是==对象的引用(地址)==

常见类型:

  • 值类型:数值类型、boolcharenumstruct
  • 引用类型:string、数组、类、接口、委托、objectdynamic

默认值:

  • 数值类型默认值一般是 0
  • bool 默认值是 false
  • char 默认值是 '\0'
  • enum 默认值是 (枚举类型)0
  • 引用类型默认值一般是 null

使用区别:

  1. 赋值时
    • 值类型:复制的是数据本身
    • 引用类型:复制的是引用
  2. 传参时
    • 默认也遵循上面的规则
    • 所以值类型通常是“传一份副本”
    • 引用类型通常是“传一份引用”

案例: 值类型:

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

注意:

  1. ==数组是引用类型,不是值类型==
  2. ==string 也是引用类型==,但它有“不可变”特性
  3. “值类型在栈上、引用类型在堆上”只是初学时的简化理解,==不适合当成绝对规则==
  4. 更稳的记法是:
    • 值类型变量保存值
    • 引用类型变量保存引用
  5. 如果想让方法直接改外部变量本身,要继续看ref和out

#基础