概述

该专栏记录了我学习.NET (C#)的笔记

参考

目录

有关 .NET / C# 介绍

数据结构

线性表

线性表是由若干个数据元素/节点组成的有限序列

线性表 数组 链表
逻辑结构 连续 连续
内存空间 连续 非连续
内存占用
访问操作 O(1) O(n)
添加操作 O(n) O(1)
删除操作 O(n) O(1)

列表最显著的特征就是大小可变,作为一种更抽象的数据结构,列表可以用数组或链表实现。因此,在使用列表的时候,通常不需要考虑容量的限制问题。

但列表的缺点也很明显:如果是数组的实现,则会出现内存浪费的问题;如果是链表的实现,则在访问元素时会有一定的性能损耗。

现代的高级语言中,通常都会提供列表的实现,比如 C# 中的List<T>

  • 数组 即 System.Array
  • 链表 即 System.Collections.Generic.LinkedList
  • 列表 即 System.Collections.Generic.List

栈和队列

栈是先入后出的,队列是先入先出的,仅此而已。

  • 即 System.Collections.Generic.Stack
  • 队列 即 System.Collections.Generic.Queue

哈希表

哈希表(散列表)存储了许多键值对以实现极快的数据查询操作。

大杂烩

C# 迭代以来出现的主要数据结构变种,以用于不同的场景。

面向对象

基本概念

设计原则

  • SOLID
  • 依赖关系注入
  • 整洁架构 VS 垂直切片

设计模式

设计模式只是一种软件设计中的经验之谈,死记硬背是行不通也用不上的。

从我的个人经验来看,每当我觉得某段代码结构混乱,或是在构思类等什么东西之间的关系时遇到困难,就可以借助设计模式来梳理思路。

推荐参考:REFACTORING GURU - C# 设计模式

依赖注入
  • 常见依赖注入库使用
  • 生命周期管理

工程实践

  • 单元测试
  • CI/CD
  • Docker 与容器化
  • NuGet 包管理
  • .csproj 文件结构与配置
  • 配置系统
  • 日志系统
  • 性能分析

高级 C#

概念

  • 模式匹配
  • 空安全
  • 迭代器
  • 泛型数学

类型与语法糖

  • 元组与解构
  • ref, outparams 传参
  • 浅复制与深复制
  • 泛型约束
  • 使用 Lazy 以延迟初始化
  • 扩展方法
  • 记录

委托与事件

  • 委托介绍与基本使用
  • 匿名委托
  • 多播委托
  • 事件介绍与基础操作

异常处理

  • 全局异常捕获
  • 自定义异常的设计规范

LINQ 与数据

  • 简介
  • 类型处理
  • 延迟执行
  • IEnumerableIQueryable

操作符

  • 筛选与投影
  • 去重、差集、交集与并集
  • 排序操作
  • 限定符

数据操作

  • 数据分区和分组
  • 数据类型转换
  • 联接操作

BCL 应用

字符串处理

  • StringBuilder
  • 字符串与字节数组的转换和应用
  • 字符串驻留池

序列化

JSON
  • JSON 介绍
  • 序列化
  • 反序列化
  • 相关特性与自定义属性
  • JSON 安全性
  • JSON 与 AOT 支持
  • System.Text.Json 与 Newtonsoft.Json 的比较
XML
  • XML 介绍
  • 序列化与反序列化

  • Stream
  • FileStream
  • MemoryStream
  • GZipStream

HTTP 编程

  • HttpClient 使用与最佳实践
  • HttpClientFactory

并发与异步

  • 异步简介与使用场景
  • async void 的陷阱

多线程与任务

  • Task 并行库
  • ValueTask 与 Task
  • Background Worker

同步与并发

  • 同步锁
  • CancellationToken

并发数据结构

  • 线程安全集合
  • 并行 LINQ
  • Channel

性能

垃圾回收

  • GC介绍,代(Generation)和机制
  • GC通知机制
  • GC配置与调优
  • using 关键字与对象释放
  • 常见的内存泄漏

内存管理

  • 指针
  • fixed 关键字
  • Span
  • Memory
  • ArrayPool 与 MemoryPool
  • SIMD 与向量化

元编程与反射与动态技术

特性

  • 特性的用途
  • 常用内置特性
  • 自定义特性

反射

  • 反射概述与用途
  • 获取运行时类型信息
  • 动态加载并使用类型
  • AssemblyLoadContext
  • 反射的性能问题

动态编程

  • 表达式树
  • 编译时与运行时的动态行为

源生成器

  • 初识源生成器
  • Roslyn API
  • 内置源生成器大赏

互操作性与 AOT

平台调用

  • 平台调用介绍
  • DllImport
  • LibraryImport
  • 本机库加载
  • 平台调用安全性

AOT

  • 发布模式对比
  • 裁剪
  • 反射限制

安全与加密

  • 在 .NET 中如何使用不同的加密方式
  • 证书管理与SSL/TLS

前沿

  • .NET Aspire
  • .NET 与 AI