
├── 第01章 【序章】关于C#,你需要了解得都在这里
│ ├── 1-1 【前言】学C#还有前景么?
│ ├── 1-2 【理论】C# vs Java
│ ├── 1-3 【操作】开发环境搭建
│ ├── 1-4 【理论】啥是CLI 啥是CLR
│ └── 1-5 【理论】.NET 的前世今生
├── 第02章 C# 基础语法
│ ├── 2-2 【理论】hello world 项目剖析
│ ├── 2-4 【理论】变量与数据类型
│ ├── 2-5 【理论】基本数据类型
│ ├── …
│ ├── 2-8 【实战】用户登陆 (if switch)
│ ├── 2-9 【理论】程序循环
│ ├── 2-10 【实战】完成用户登陆流程 (循环)
│ ├── …
│ └── 2-13 【操作】值传参 vs 引用传参 vs 输出传参
├── 第03章 面向对象:入门
│ ├── 3-2 【理论】什么是面向对象
│ ├── 3-4 【操作】类class与实例instance
│ ├── …
│ ├── 3-8 【理论】字段、属性与对象封装
│ ├── …
│ └── 3-12 【实战】用户管理
├── 第04章 面向对象:继承与组合
│ ├── 4-2 【理论】松耦合设计思想
│ ├── 4-4 【理论】继承
│ ├── 4-5 【理论】复合
│ ├── …
│ └── 4-9 【操作】装箱与拆箱
├── 第05章 面向对象:多态
│ ├── 5-2 【操作】虚方法与方法重写
│ ├── 5-3 【理论】什么是多态
│ ├── 5-4 【理论】抽象类与抽象成员
│ └── 5-5 【理论】sealed类与sealed成员
├── 第06章 面向对象:接口
│ ├── 6-2 【理论】什么是接口
│ ├── 6-3 【操作】接口代码实现
│ ├── …
│ ├── 6-7 【理论】反转控制与依赖注入
│ ├── 6-8 【操作】反转控制与依赖注入
│ ├── …
│ └── 6-12 【实战】面向接口案例改造重构
├── 第07章 C# 高级编程
│ ├── 7-2 【操作】结构 Structs
│ ├── 7-3 【操作】枚举 Enums
│ ├── 7-4 【操作】泛型入门
│ ├── …
│ ├── 7-9 【理论】反射与元数据
│ ├── 7-10 【操作】反射实战
│ └── 7-11 【操作】异常处理 exception halding
├── 第08章 委托与事件
│ ├── 8-2 【理论】什么是委托
│ ├── 8-3 【操作】预定义委托方法 Func、Action
│ ├── 8-4 【操作】c#预定义事件
│ ├── 8-5 【操作】自定义事件
│ └── 8-6 【操作】字段式事件声明
├── 第09章 WPF基础入门
│ ├── 9-2 【操作】WPF 基础入门
│ ├── 9-3 【理论】XAML页面剖析
│ ├── …
│ ├── 9-7 【操作】依赖属性与数据处理
│ ├── 9-8 【操作】Data Binding 数据绑定
│ └── 9-9 【操作】INotifyPropertyChanged 事件处理
├── 第10章 数据库与WPF实战
│ ├── 10-2 【操作】SQL Server 安装
│ ├── 10-3 【实战】dataset与table设置
│ ├── 10-4 【实战】显示列表型数据:客户列表
│ ├── …
│ ├── 10-6 【实战】显示关联型数据:客户预约记录
│ ├── …
│ └── 10-9 【实战】更新数据
├── 第11章 WPF实战-重构与美化
│ ├── 11-2 【理解】什么是数据模型
│ ├── 11-3 【理解】什么是Entity Framework
│ ├── …
│ ├── 11-9 【理论】MVVM 架构
│ ├── 11-10 【重构】创建视图模型,显示客户列表
│ ├── …
│ ├── 11-16 【UI美化】配置Material UI框架
│ └── 11-17 【UI美化】预约日历:自定义依赖属性
├── 第12章 Array与Collection
│ ├── 12-2 【理论】什么是集合
│ ├── 12-3 【理论】数组:固定长度的有序集合
│ ├── 12-4 【理论】数组Array、列表List、数组列表ArrayList
│ ├── …
│ ├── 12-10 【操作】数据搜索:字典
│ └── 12-11 【操作】集合的交、并、差运算:HashSet
├── 第13章 Linq
│ ├── 13-2 【理论】什么是linq
│ ├── 13-3 【理论】lambda 表达式
│ ├── 13-4 【理论】linq查询语法
│ ├── 13-5 【操作】 linq 原理深度剖析
│ ├── …
│ ├── 13-10 【操作】数据连接 join
│ ├── …
│ └── 13-13 【操作】数据聚合
├── 第14章 多线程与异步
│ ├── 14-2 【演示】多线程能干嘛
│ ├── 14-3 【理论】什么是进程?什么是线程
│ ├── 14-4 【操作】前台线程、后台线程与线程池托管
│ ├── …
│ ├── 14-8 【理解】hello 异步
│ ├── 14-9 【理论】异步编程 Task
│ ├── 14-10 【理解】C#的异步async await
│ ├── 14-11 【操作】Await async 真香
│ ├── 14-12 【操作】异步是多线程吗?Task vs Thread-
│ └── 14-13 【理论】并发(Concurrency)不是并行(Parallelism)
├── 第15章垃圾回收、析构与IDisposable
│ ├── 15-2【理论】读懂垃圾回收GC
│ ├── 15-3【理论】GC是如何工作的
│ ├── …
│ ├── 15-5【理论】什么是Disposable模式
│ └── 15-6【操作】使用IDisposable回收非托管资源
├── 第16章Unity3D实战:基础入门
│ ├── 16-2【基础操作】环境搭建与界面入门
│ ├── 16-3【基础操作】什么是Rigidbody刚体
│ ├── 16-4【基础操作】如何移动物体
│ ├── …
│ ├── 16-7【基础操作】如何处理碰撞事件
│ └── 16-8【基础操作】预设物件(Prefabs)与游戏对象
└── 第17章Unity3D实战:忍者切西瓜
├── 17-2【U3D实战】项目启动
├── 17-3【U3D实战】创建水果发射器
├── 17-4【U3D实战】水果发射
├── 17-5【U3D实战】创建忍者刀
└── 17-6【U3D实战】创建游戏交互界面