home commit with new plugins

This commit is contained in:
2026-06-21 09:51:55 +08:00
parent ebb9e385c5
commit 3d067fe75c
85 changed files with 10794 additions and 1443 deletions
@@ -1,46 +1,61 @@
# 值类型和引用类型
概念:
==引用类型:string、数组、类==
==值类型:剩下都是,包括数组、enum、结构体==
值类型默认都是0
bool类型是false
引用类型默认值是null
- C# 的类型大体分成两类:==值类型== 和 ==引用类型==
- 值类型变量通常==直接保存数据本身==
- 引用类型变量保存的是==对象的引用(地址)==
常见类型:
- 值类型:数值类型、`bool``char``enum``struct`
- 引用类型:`string`、数组、类、接口、委托、`object``dynamic`
默认值:
- 数值类型默认值一般是 `0`
- `bool` 默认值是 `false`
- `char` 默认值是 `'\0'`
- `enum` 默认值是 `(枚举类型)0`
- 引用类型默认值一般是 `null`
使用区别:
值类型:在相互赋值时,把内容进行拷贝 //他变我不变
引用类型:把相互赋值时,把==地址==进行拷贝 //他变我也变
原因:
值类型和引用类型 存储的内存区域不同,存取方式也不一样
值类型:栈空间 —— 小但是快 (0GC)
引用类型:堆空间 —— 大但是慢 (且有GC)
1. 赋值时
- 值类型:复制的是数据本身
- 引用类型:复制的是引用
2. 传参时
- 默认也遵循上面的规则
- 所以值类型通常是“传一份副本”
- 引用类型通常是“传一份引用”
案例:
值类型:
```Csharp
static void ChangeValue(int value)
{
value =3:
}
static void Main(string[] args)
{
int a = 1;
ChangeValue(1);
cw(a);
}
//仍然输出1
值类型:
```csharp
static void ChangeValue(int value)
{
value = 99;
}
int a = 1;
ChangeValue(a);
Console.WriteLine(a); // 1
```
引用类型:
```Csharp
static void ChangeValue(int[] value)
{
value =99:
}
static void Main(string[] args)
{
int[] a = {1};
ChangeValue(a);
cw(a[0]);
}
//输出99
引用类型:
```csharp
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]]
#基础