commit 02810617db1717f2f0cbfcc111da1cc68f64d83a Author: Kister Hakusan <2753888203@qq.com> Date: Mon Apr 13 15:40:15 2026 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6681b58 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Obsidian local state +.obsidian/workspace.json +.obsidian/cache/ + +# OS files +.DS_Store +Thumbs.db +desktop.ini diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..6abe4c1 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,3 @@ +{ + "alwaysUpdateLinks": true +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/bookmarks.json b/.obsidian/bookmarks.json new file mode 100644 index 0000000..9b113ab --- /dev/null +++ b/.obsidian/bookmarks.json @@ -0,0 +1,14 @@ +{ + "items": [ + { + "type": "file", + "ctime": 1775895995303, + "path": "笔记/CSharp笔记汇总.md" + }, + { + "type": "file", + "ctime": 1775896004734, + "path": "笔记/Unity笔记汇总.md" + } + ] +} \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..639b90d --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,33 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "footnotes": false, + "properties": true, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": true, + "bases": true, + "webviewer": false +} \ No newline at end of file diff --git a/.obsidian/hotkeys.json b/.obsidian/hotkeys.json new file mode 100644 index 0000000..b0a0925 --- /dev/null +++ b/.obsidian/hotkeys.json @@ -0,0 +1,20 @@ +{ + "editor:toggle-highlight": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "H" + } + ], + "editor:toggle-strikethrough": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "X" + } + ] +} \ No newline at end of file diff --git a/.obsidian/templates.json b/.obsidian/templates.json new file mode 100644 index 0000000..ea22a8d --- /dev/null +++ b/.obsidian/templates.json @@ -0,0 +1,3 @@ +{ + "folder": "模板文件夹" +} \ No newline at end of file diff --git a/.obsidian/types.json b/.obsidian/types.json new file mode 100644 index 0000000..f7e6513 --- /dev/null +++ b/.obsidian/types.json @@ -0,0 +1,8 @@ +{ + "types": { + "aliases": "aliases", + "cssclasses": "multitext", + "tags": "tags", + "date": "date" + } +} \ No newline at end of file diff --git a/图库/CSharp/Pasted image 20260412210327.png b/图库/CSharp/Pasted image 20260412210327.png new file mode 100644 index 0000000..5a96ad8 Binary files /dev/null and b/图库/CSharp/Pasted image 20260412210327.png differ diff --git a/图库/CSharp/Pasted image 20260412210704.png b/图库/CSharp/Pasted image 20260412210704.png new file mode 100644 index 0000000..edfd71a Binary files /dev/null and b/图库/CSharp/Pasted image 20260412210704.png differ diff --git a/图库/CSharp/Pasted image 20260412210810.png b/图库/CSharp/Pasted image 20260412210810.png new file mode 100644 index 0000000..c52d092 Binary files /dev/null and b/图库/CSharp/Pasted image 20260412210810.png differ diff --git a/图库/CSharp/Pasted image 20260412210946.png b/图库/CSharp/Pasted image 20260412210946.png new file mode 100644 index 0000000..50a920f Binary files /dev/null and b/图库/CSharp/Pasted image 20260412210946.png differ diff --git a/待办/CSharp重学.md b/待办/CSharp重学.md new file mode 100644 index 0000000..83a26b1 --- /dev/null +++ b/待办/CSharp重学.md @@ -0,0 +1,41 @@ +- [x] [[常量]] +- [x] [[转义字符]] +- [x] [[格式转换]] +- [x] [[字符串拼接]] +- [x] [[三目运算符]] +- [x] 枚举 +- [x] 值和引用类型 +- [x] ref和out +- [x] 变长参数 +- [x] 结构体和枚举 +- [x] 成员变量和访问修饰符 +- [ ] 垃圾回收 +- [ ] 成员属性 +- [ ] 索引器 +- [ ] 静态成员静态类和静态构造函数 +- [ ] 内部类和分布类 +- [ ] 装箱与拆箱 +- [ ] 密封类 +- [ ] 多态vob +- [ ] 抽象类和抽象函数 +- [ ] 接口 +- [ ] 密封函数 +- [ ] 命名空间 +- [ ] 抽象类的接口的区别 +- [ ] ArrayList +- [ ] Stack +- [ ] Queue +- [ ] Hashtable +- [ ] 泛型和泛型约束 +- [ ] List +- [ ] Dictionary +- [ ] LinkedList +- [ ] 泛型栈和队列 +- [ ] 委托事件 +- [ ] 匿名函数 +- [ ] lambda +- [ ] List排序 +- [ ] 协变逆变 +- [ ] 多线程 +- [ ] 预处理器 +- [ ] 反射 diff --git a/待办/Unity重学.md b/待办/Unity重学.md new file mode 100644 index 0000000..b1b7279 --- /dev/null +++ b/待办/Unity重学.md @@ -0,0 +1,4 @@ +- [ ] 入门重学 +- [ ] 基础学习 +- [ ] 核心学习 +- [ ] 进阶学习 \ No newline at end of file diff --git a/待办/大待办.md b/待办/大待办.md new file mode 100644 index 0000000..4afc201 --- /dev/null +++ b/待办/大待办.md @@ -0,0 +1,3 @@ +- [ ] 调作息 +- [ ] 学习规划 +- [ ] 毕设论文与优化规划 \ No newline at end of file diff --git a/待办/日常.md b/待办/日常.md new file mode 100644 index 0000000..7ac63c5 --- /dev/null +++ b/待办/日常.md @@ -0,0 +1,3 @@ +- [ ] PUBG任务 +- [ ] 设置闹钟 +- [ ] \ No newline at end of file diff --git a/待办/毕设待办.md b/待办/毕设待办.md new file mode 100644 index 0000000..76a7254 --- /dev/null +++ b/待办/毕设待办.md @@ -0,0 +1,3 @@ +- [ ] 优化ui +- [ ] 稳定输出 +- [ ] 扩容任务 \ No newline at end of file diff --git a/快捷键.md b/快捷键.md new file mode 100644 index 0000000..5486208 --- /dev/null +++ b/快捷键.md @@ -0,0 +1,3 @@ +**Ctrl+B** +*Ctrl+I* +==Ctrl+Shift+H== \ No newline at end of file diff --git a/未命名.canvas b/未命名.canvas new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/未命名.canvas @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/模板文件夹/CSharp笔记模板.md b/模板文件夹/CSharp笔记模板.md new file mode 100644 index 0000000..69877e6 --- /dev/null +++ b/模板文件夹/CSharp笔记模板.md @@ -0,0 +1,14 @@ +概念: + + +通常用法: + + +语法: + + +案例: + + +注意: + diff --git a/模板文件夹/Unity笔记模板.md b/模板文件夹/Unity笔记模板.md new file mode 100644 index 0000000..5747327 --- /dev/null +++ b/模板文件夹/Unity笔记模板.md @@ -0,0 +1,12 @@ +概念: + + +语法: + + +案例: + + +注意: + + diff --git a/欢迎.md b/欢迎.md new file mode 100644 index 0000000..034ec91 --- /dev/null +++ b/欢迎.md @@ -0,0 +1,5 @@ +这是你的新*仓库*。 + +写点笔记,[[创建链接]],或者试一试[导入器](https://help.obsidian.md/Plugins/Importer)插件! + +当你准备好了,就将该笔记文件删除,使这个仓库为你所用。 \ No newline at end of file diff --git a/笔记/CSharp/入门/三目运算符.md b/笔记/CSharp/入门/三目运算符.md new file mode 100644 index 0000000..41d43c9 --- /dev/null +++ b/笔记/CSharp/入门/三目运算符.md @@ -0,0 +1,6 @@ +语法: A ? B : C; +返回值类型必须一致 +EG: str = true ? "真" : "假"//str为真 + +EG: str = 1 > 2 ? "真" : "假"//假 +#入门 \ No newline at end of file diff --git a/笔记/CSharp/入门/字符串拼接.md b/笔记/CSharp/入门/字符串拼接.md new file mode 100644 index 0000000..3e11759 --- /dev/null +++ b/笔记/CSharp/入门/字符串拼接.md @@ -0,0 +1,9 @@ +拼接方式 + 1. "+" + 1. str += "1" + 4 + true; //"14true" + 2. str += 1+2+3;//"6"先运算后convert + 3. str += ""+1+2+3;"123" + 2. string.Format("待拼接的内容",内容1,内容2.....); + 1. str = string.Fomat("我是{0},我今年{1}岁","HK",18);//我是HK,今年18岁 + 3. $"{0}balabala{1}",balabala,balabala +#入门 \ No newline at end of file diff --git a/笔记/CSharp/入门/常量.md b/笔记/CSharp/入门/常量.md new file mode 100644 index 0000000..beac251 --- /dev/null +++ b/笔记/CSharp/入门/常量.md @@ -0,0 +1,11 @@ +关键字const + +const 变量类型 变量名 = 值; + +1. ==必须初始化== +2. ==不能修改 + +应用场景 + 定义PI 3.14 + 数学相关 +#入门 \ No newline at end of file diff --git a/笔记/CSharp/入门/格式转换.md b/笔记/CSharp/入门/格式转换.md new file mode 100644 index 0000000..d6e0bac --- /dev/null +++ b/笔记/CSharp/入门/格式转换.md @@ -0,0 +1,59 @@ +### **隐式转换** +##### **相同大类型** + 一般都遵守 ==大的能装小的,小的装不了大的== + + 有符号(long int short sbyte) + + 无符号(ulong uint ushort byte) + + 浮点数(decimal double float) + ==decimal没有办法隐式转换== + 其他同规则 + + 特殊类型(bool char string) + ==不存在隐式转换== + +##### 不同大类型 +==无符号不能隐式转换装有符号== + +有符号装无符号需要==注意范围== +int 不能装 uint (正方向少1) + +==浮点数可以装任意类型的整数== +==decimal可以隐式存储整型== + +==整数无法装浮点== + +##### 整理 +大范围装小范围 +高精度装低精度 +string 和 bool 不参与隐式转换 +decimal比较特殊 +char是ASCII所以可以转换成整型和浮点型 + +double > float > 所有整型 +decimal > 所有整型 +### **显示转换** +1. 括号强转 + 1. 精度和范围(丢精度和溢出) + 2. 语法:变量类型 变量名 = (变量类型)变量; + 3. EG: double double1 = (double)int1; + +2. Parse法(一般用来转换字符串到数字) + 1. ==字符串必须能够转换为对应类型== 否则报错 + 2. 语法:变量类型.Parse("字符串") + 3. EG: int int1 = int.Parse("123"); + +3. Convert法 + 1. 注意点和Parse法一样,精度比强转准一点(有四舍五入) + 2. 语法:Convert.To变量类型(变量或常量) + 3. EG:int int1 = Conver.ToInt32("123") +4. 其他类型转String + 1. 常用于拼接打印 + 2. 语法:变量.toString(); + 3. EG: string str = 1.ToString(); / 'A'.ToString(); / true.ToString(); + 4. 特殊用法string str = "123123" + 1.23 + True;(隐式调用ToString方法了) + + + +#入门 \ No newline at end of file diff --git a/笔记/CSharp/入门/转义字符.md b/笔记/CSharp/入门/转义字符.md new file mode 100644 index 0000000..58b6f13 --- /dev/null +++ b/笔记/CSharp/入门/转义字符.md @@ -0,0 +1,21 @@ +单引号\\' +string str = "\\'123\\'" + +双引号 +str = "\\"123\\"" + +换行 +str = "1\n23" + +斜杠 +str = "12\\\3" + + +以下不常用 +制表符\t + +光标退格\b + +红字符\0 + +#入门 \ No newline at end of file diff --git a/笔记/CSharp/基本概念.md b/笔记/CSharp/基本概念.md new file mode 100644 index 0000000..43e703a --- /dev/null +++ b/笔记/CSharp/基本概念.md @@ -0,0 +1,13 @@ +### 三大特性 +1. 封装 +2. 继承 +3. 多态 + +#### 七大原则 +1. 开闭原则 +2. 依赖倒转原则 +3. 里氏替换原则 +4. 单一职责原则 +5. 接口隔离原则 +6. 合成复用原则 +7. 迪米特法则 diff --git a/笔记/CSharp/基础/ref和out.md b/笔记/CSharp/基础/ref和out.md new file mode 100644 index 0000000..7a27106 --- /dev/null +++ b/笔记/CSharp/基础/ref和out.md @@ -0,0 +1,28 @@ +通常用法: + 解决值[[值类型和引用类型]]在函数内外部互相传递时的问题 + 函数内部改外部传入也改 + ==ref和out的区别:== + ref: + - 传入的参数必须初始化(赋值) + - 方法内可读可写 + out: + - 传入前**可以不初始化** + - 方法内**必须赋值**,否则编译报错 + +语法: +在函数传参时,两边都要加上修饰词 +ref: +```Csharp + static void ChangeValue(ref value) + ChangeValue(ref a); +``` + +案例: +原型在[[值类型和引用类型]]笔记中 + +注意: +==out不是用来让内外值一定不等== +==ref传入的参数必须初始化== +如果传入引用类型且内外不同,推荐new一个 + +#基础 \ No newline at end of file diff --git a/笔记/CSharp/基础/值类型和引用类型.md b/笔记/CSharp/基础/值类型和引用类型.md new file mode 100644 index 0000000..76e940a --- /dev/null +++ b/笔记/CSharp/基础/值类型和引用类型.md @@ -0,0 +1,46 @@ +概念: + ==引用类型:string、数组、类== + ==值类型:剩下都是,包括数组、enum、结构体== + + 值类型默认都是0 + bool类型是false + 引用类型默认值是null + +使用区别: + 值类型:在相互赋值时,把内容进行拷贝 //他变我不变 + 引用类型:把相互赋值时,把==地址==进行拷贝 //他变我也变 + 原因: + 值类型和引用类型 存储的内存区域不同,存取方式也不一样 + 值类型:栈空间 —— 小但是快 (0GC) + 引用类型:堆空间 —— 大但是慢 (且有GC) + +案例: + 值类型: +```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: + } + static void Main(string[] args) + { + int[] a = {1}; + ChangeValue(a); + cw(a[0]); + } + //输出99 +``` +#基础 diff --git a/笔记/CSharp/基础/变长参数.md b/笔记/CSharp/基础/变长参数.md new file mode 100644 index 0000000..2bce29d --- /dev/null +++ b/笔记/CSharp/基础/变长参数.md @@ -0,0 +1,23 @@ +概念: +解决函数传递时需要传递多个(不确定具体个数)参数的问题 + +通常用法: + + +语法: + 关键字:params + +案例: +```Csharp + static int Sum(params int[] arr) + { + //具体方法 + return value; + } + + Sum(1,2,3,4,5,6,7); //都会存入arr里 +``` +注意: +==params关键字后面必须是数组== +==最多只能有1个变长参数 且必须放在末尾== +#基础 \ No newline at end of file diff --git a/笔记/CSharp/基础/枚举.md b/笔记/CSharp/基础/枚举.md new file mode 100644 index 0000000..f594768 --- /dev/null +++ b/笔记/CSharp/基础/枚举.md @@ -0,0 +1,34 @@ +概念:被命名的整型[[常量]]集合 +通常用法:存储玩家状态等,==和switch天生一对== + +用int表示会导致非常难直观信息,可以用枚举给数值类型加名字 + +语法: +声明地点: + 1.==namespace中(常用)== + 2.class或struct中 +声明枚举: +```Csharp + enum E_自定义枚举名 + { + 自定义枚举量, //自带一个下标0 + 自定义枚举量2, //自动累加 + 自定义枚举量3, + 自定义枚举量4 = 100 //手动设置下标 + } +``` + +声明枚举变量: + >自定义枚举类型 变量名 = 默认值; + +案例: + 实例化枚举: + E_自定义枚举名 e1 = E_自定义枚举名.自定义枚举量 + +注意: +声明==枚举==和声明==枚举变量==是两个事情 +枚举最好不要用中文 + +可以和int、string类型[[格式转换]] //非常少用 + +#基础 diff --git a/笔记/CSharp/基础/结构体.md b/笔记/CSharp/基础/结构体.md new file mode 100644 index 0000000..4ee2016 --- /dev/null +++ b/笔记/CSharp/基础/结构体.md @@ -0,0 +1,42 @@ +概念: + 自定义变量类型 类似枚举 + ==数据和函数的集合== + 是[[值类型和引用类型|引用类型]] + + +通常用法: + 解决复杂类型数据的存储 + 写namespace层级中 + +语法: + 关键字struct + 必须有变量 + 构造函数(可选) + 函数(可选) + +案例: +```Csharp + struct Student + { + int age; + bool sex; + int number; + string name; + void speak(){} + } +``` + +注意: +可以声明变量和方法、构造方法 +甚至可以声明别的结构体,但是不能用自己声明自己 +==不能在结构体内初直接给成员初始化== +==和static class相反!!!== +==`struct` 本身就是[[值类型和引用类型|值类型]]、可实例化、可复制、可栈上分配== +==`static class` 的设计目的:**只装静态成员,不能实例化**== + + +==邪修:== +`static class`:纯工具类,不能 new +`struct`:值类型,必须能 new、复制、栈分配 → 不支持 static +struct 内部不能直接给字段赋值 → 为了效率,无隐式初始化 +#基础 \ No newline at end of file diff --git a/笔记/CSharp/杂记/命名法.md b/笔记/CSharp/杂记/命名法.md new file mode 100644 index 0000000..9c694e5 --- /dev/null +++ b/笔记/CSharp/杂记/命名法.md @@ -0,0 +1,7 @@ +帕斯卡命名法:开头大写后续小写 +应用场景:函数名、[[成员属性]]名 +EG:Name + +驼峰命名法:开头小写,中间大写 +应用场景:变量名 +EG:myName \ No newline at end of file diff --git a/笔记/CSharp/核心/成员变量和访问修饰符.md b/笔记/CSharp/核心/成员变量和访问修饰符.md new file mode 100644 index 0000000..6a6be95 --- /dev/null +++ b/笔记/CSharp/核心/成员变量和访问修饰符.md @@ -0,0 +1,51 @@ +概念: +1. 声明在类中 +2. 用来描述对象特征 +3. 任意变量类型 +4. 是否赋值根据需求决定 + + +通常用法: + + +语法: +1. 声明: +```Csharp + enum E_SexType + { + male, + female + } + class Human + { + string name; + int age; + E_Sex sex; + Human[] friend; //==可以类里声明自己类的同类型 但是不能实例化!== + } +``` +2. 访问修饰符 + public——公共的 类内部和外部都可以进行访问 + private——私有的 只有内部才能访问 ==子类不行== + protected——保护的 只有自己内部和子类才可以访问 +3. 成员默认值 + 可以看[[值类型和引用类型]] + 懒得看可以cw(default(变量类型)) + +案例: +```Csharp + class Human + { + string name; + int age; + E_Sex sex; + Human[] friend; //==可以类里声明自己类的同类型 但是不能实例化!== + } + Human h1 = new Human(); + h1.age = 18; + cw(h1.age); +``` + + +注意: + diff --git a/笔记/CSharp/核心/成员属性.md b/笔记/CSharp/核心/成员属性.md new file mode 100644 index 0000000..7edfba3 --- /dev/null +++ b/笔记/CSharp/核心/成员属性.md @@ -0,0 +1,85 @@ +概念: +==和成员变量不完全是一个概念!!!!== +1. 用于保护成员变量 +2. 为成员属性的获取和复制添加逻辑处理 +3. 解决3P局限性 +自动属性 + +通常用法: + 配合private加密或规范成员属性的修改获取等 + 让其==只能获取不能修改== 或 ==只能修改不能获取== + +语法: + 属性声明: +```Csharp + 访问修饰符 属性类型 属性名 + { + get{} + set{} + } +``` + +案例: +```Csharp +class Person() +{ + private int age; + private string name; + private int money; + private bool sex; + public string Name [[命名法|帕斯卡命名法]] + { + get==必须有返回值== + { + //这里写处理获取内容的逻辑 + return name; + } + set + { + //这里写处理修改/添加内容的逻辑,不写就没有 + ==//关键字value 用于表示外部传入的值 只在set中有== + name = value; + } + } +} + +Person p = new Person(); +~~p.name = xxx~~ 因为private所以没法用.name +p.Name = xxx; +``` + +↑写了一个public的属性大家都可以访问,用该属性Name进行修改 return直接返回原始的name,set时使用.Name将xxx作为传入参数放到set的value关键字中 + +案例2: +```Csharp + public int Money() + { + get + { + return money; + } + set + { + if(value<0) value = 0; + cw(没钱); + money = value; + } + } +``` +↑最简单的防止money为负数的逻辑 + +注意: +成员属性不加访问修饰符,会使用成员变量声明时的访问权限 +==get和set也可以加访问修饰符,但是不能大于成员属性前访问修饰符的权限== +可以只有一个set或只有一个get(只能得或只能改),但是通常没人这么干 + +自动属性 +相当于声明了一个成员变量,但是好处是可以添加访问修饰符 +案例:可以得,但是不能改得一个成员↓ +```Csharp +public float Height +{ + get; + private set; +} +``` \ No newline at end of file diff --git a/笔记/CSharp/核心/构造、解析、垃圾回收.md b/笔记/CSharp/核心/构造、解析、垃圾回收.md new file mode 100644 index 0000000..49a815f --- /dev/null +++ b/笔记/CSharp/核心/构造、解析、垃圾回收.md @@ -0,0 +1,145 @@ +# 构造函数: +概念: +实例化时,用于初始化的函数 +不写默认有一个无参构造函数 +==可以重载== + +通常用法: +自定义初始化规则 + +语法: +访问修饰符 类名(){} + +案例: +```Csharp +class Person() +{ + public string name; + public int age; + public Person() + { + name = "默认值"; + age = 默认值; + } +} +``` + +this关键字: + this指当前类声明的成员变量 +```Csharp + class Person() + { + public string name; + public int age; + public Person() + { + name = "默认值"; + age = 默认值; + } + public Person(int age,string name) //重构 + { + this.name = name; + //后面的name是传递的参数,this.name是最上方public int出来的 + this.age = name; + } + } +``` + +特殊写法: + 通过this重用构造函数代码,即先调用无参构造函数,然后在调用这个特殊写法的构造函数 + 语法:访问修饰符 构造函数名(参数列表):this(【可选】参数1,参数2.....) + 例子: +```Csharp + public Person(int age, string name):this(age) + { + balabala + } +``` + 过程:先调用无参Person构造函数,然后寻找只有构造单个参数age的构造函数进行初始化 + +注意: +==函数名和类名必须相同== +==没有特殊用途,一般都是public== + +==如果写了有参构造函数且自己没有保留无参构造函数,那么类在实例化时只能使用有参构造函数且无法使用无参构造函数== + + + +---- +# 析构函数 +概念: +当引用类型堆内存被回收时,会调用该函数 +对于需要手动管理内存的语言(C++),需要在析构函数中做一些内存回收处理 +C#有自动垃圾回收机制GC +Unity中基本不用管 + +通常用法: + + +语法: +```Csharp +~类名() +{ +} +``` +案例: +```Csharp +~Person() +{ + +} +``` + +注意: + + +---- +# 垃圾回收 +垃圾回收(GC) +通过遍历堆Heap上动态分配的所有对象 +通过识别他们是否被引用来确定哪些对象时垃圾,哪些对象仍然需要引用 +垃圾:没有变量或对象引用的内容 +如果是垃圾就要被回收释放 + +一般都是==被动触发(会造成卡顿)==,所以游戏一般需要手动执行垃圾回收 +语法:GC.Collect(); +==GC会造成卡顿,所以在加载Loading时一般会调用== + +垃圾回收有多种算法 +引用计数 +标记清楚 +标记整理 +复制集合 + +注意: +GC只负责Heap内存的垃圾祸首 +引用类型都是在Heap中的,所以他需要GC来进行管理 + +栈Stack上的内存时系统自动管理的 +所以不需要GC + +C#中垃圾回收机制的大概原理 +他会把内存分为0,1,2代内存 +代的概念是垃圾回收中的一种算法需要 +新分配的对象都会被配置在第0代内存中 +每次分配都可能会进行垃圾回收(一般来说0代内存满了就会触发) +在第一次内存回收过程开始时,垃圾回收器会认为堆中全是垃圾,会进行一下两部 +1.标记对象,从根(静态参数、方法参数)开始检查引用对象,标记后为可达对象,未标记就是不可大对象 +不可达对象就会认为是垃圾 +2.搬迁对象 压缩堆 (挂起执行内存托管代码线程:把第0代内存(还不是垃圾的内存)放到一代进行搬迁)释放未标记的对象、搬迁可达对象、修改引用地址 + +大对象总被认为是二带内存,目的是减少性能损耗 +不会对大对象进行压缩搬迁 大对象是85000kb以上的 + +示意图 +step1:程序放入内存 +![[Pasted image 20260412210327.png|697]] +step2:发现沾满了 +![[Pasted image 20260412210704.png]] +step3:原来的地址搬迁,无引用的垃圾丢掉 +![[Pasted image 20260412210810.png]] +step4:D放入 +![[Pasted image 20260412210946.png]] +step5:如果0代1代后续又满了,那么这套算法会同时做用在两代内存中,以此类推 +类似多级缓存cache,L1最快但常换L3最慢 +#基础 \ No newline at end of file diff --git a/笔记/CSharp/核心/索引器.md b/笔记/CSharp/核心/索引器.md new file mode 100644 index 0000000..63a4649 --- /dev/null +++ b/笔记/CSharp/核心/索引器.md @@ -0,0 +1,34 @@ +概念: +让对象像数组一样可以通过下标访问,方便程序编写 + +通常用法: + + +语法: +```Csharp +访问修饰符 返回值 this[参数类型 参数名1,参数类型 参数名2.....] +{ + get{} ==内部写法和属性相似== + set{} +} +``` + +案例: +```Csharp +class Person +{ + private string name; + priavte int age; + private Person[] friends; + public Person this[int index] + { + get{return friends[index];} + set{friends[index] = value;} + } +} + +Person p1 = new Person(); +p[0] = new Person(); +``` +注意: + diff --git a/笔记/CSharp笔记汇总.md b/笔记/CSharp笔记汇总.md new file mode 100644 index 0000000..afdd88b --- /dev/null +++ b/笔记/CSharp笔记汇总.md @@ -0,0 +1,46 @@ +# [[基本概念|C#基本概念]] +# 入门 +1. [[常量]] +2. [[转义字符]](解决string内部符号问题) +3. [[格式转换]] +4. [[字符串拼接]] +5. [[三目运算符]] +# 基础 +1. [[枚举]] +2. [[值类型和引用类型]] +3. [[ref和out]] +4. [[变长参数]] +5. [[结构体]]和[[枚举]] +# 核心 +1. [[成员变量和访问修饰符]] +2. [[构造、解析、垃圾回收]] +3. [[成员属性]] +4. [[索引器]] +5. 静态成员静态类和静态构造函数 +6. 内部类和分布类 +7. 装箱与拆箱 +8. 密封类 +9. 多态vob +10. 抽象类和抽象函数 +11. 接口 +12. 密封函数 +13. 命名空间 +14. 抽象类的接口的区别 +# 进阶 +1. ArrayList +2. Stack +3. Queue +4. Hashtable +5. 泛型和泛型约束 +6. List +7. Dictionary +8. LinkedList +9. 泛型栈和队列 +10. 委托事件 +11. 匿名函数 +12. lambda +13. List排序 +14. 协变逆变 +15. 多线程 +16. 预处理器 +17. 反射 \ No newline at end of file diff --git a/笔记/Unity笔记汇总.md b/笔记/Unity笔记汇总.md new file mode 100644 index 0000000..edd5204 --- /dev/null +++ b/笔记/Unity笔记汇总.md @@ -0,0 +1,10 @@ +# 入门 +1. 生命周期函数 +2. Monobehavior中的重要内容 +3. Gameobject相关 +4. Time相关 +5. Transform相关 +6. Screen相关 +7. Camera代码相关 +8. 碰撞检测相关 +9. 刚体加里知识点 \ No newline at end of file