概述

该专栏记录了我学习.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 文件结构与配置
  • 配置系统
  • 日志系统
  • 性能分析

高级 .NET

概念补充

  • 异常处理
  • 模式匹配
  • 空安全
  • 逆变与协变
  • 迭代器

类型

  • 有关 .NET 的六个重要概念 值类型,引用类型,装箱和拆箱等
  • ref, outparams 传参
  • 浅复制与深复制
  • 泛型约束
  • 使用 Lazy 以延迟初始化
  • 扩展方法
  • 记录

垃圾回收

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

字符串处理

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

HTTP 编程

  • HttpClient 使用与最佳实践
  • HttpClientFactory

LINQ

  • 简介
  • 类型处理
  • 筛选与投影
  • 去重、差集、交集与并集
  • 排序操作
  • 限定符
  • 数据分区和分组
  • 数据类型转换
  • 联接操作

多线程与异步

  • 异步简介与使用场景
  • 同步锁
  • Task 并行库
  • 并行 LINQ
  • 线程安全集合
  • Channel
  • CancellationToken
  • Background Worker
  • async void 的陷阱

委托与事件

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

安全与加密

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

特性

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

反射

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

序列化

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

  • Stream
  • FileStream
  • MemoryStream
  • GZipStream

动态编程与可视化树

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

平台调用

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

底层与性能

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

前沿

  • .NET Aspire
  • .NET 与 AI