
书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:
一、语言基础
- “C#的类型系统分为值类型(栈分配,如
int
)和引用类型(堆分配,如class
),struct
是轻量级值类型的核心载体。” - “可空引用类型(Nullable Reference Types)通过
string?
显式声明可能为null
的引用,编译器静态分析减少空引用异常。”
二、异步编程
- “
async
/await
的本质是状态机转换,Task
表示尚未完成的操作,ValueTask
优化高频低耗场景。” - “
IAsyncEnumerable<T>
支持异步流式数据处理,await foreach
逐项消费异步序列。”
三、模式匹配
- “模式匹配的进化:
switch
表达式支持属性模式(case { Length: >5 }
)、元组模式等,取代多层if-else
。” - “递归模式匹配解构复杂对象:
if (obj is Employee { Name: string name, Dept: "IT" })
。”
四、接口与默认实现
- “C# 8.0允许接口提供默认方法实现(
default
关键字),平衡抽象与复用,但需警惕‘钻石继承’问题。”
五、范围与索引
- “
Index
类型表示从首(^0
)或尾(^1
)的偏移,Range
定义切片区间(array[1..^1]
),简化集合操作。”
六、面向对象
- “只读
struct
成员(readonly
修饰)确保方法不会修改状态,编译器可做激进优化。” - “
using
声明(无大括号)简化资源管理,作用域结束时自动释放。”
七、函数式特性
- “本地函数(Local Functions)封装方法内复用逻辑,优于
private
方法因可捕获外层变量。” - “静态本地函数(
static
修饰)禁止捕获上下文变量,提升性能与可预测性。”
八、性能优化
- “
Span<T>
和Memory<T>
提供对连续内存的统一视图,支持栈/堆/原生内存的高效操作。” - “
ref struct
限制类型仅分配在栈上,避免GC开销,但不可装箱或跨await
使用。”
九、元编程
- “源代码生成器(Source Generators)在编译时生成代码,替代部分运行时反射,提升性能。”
十、设计哲学
- “C#的设计平衡:面向对象根基(封装/继承/多态)与函数式特性(不可变/模式匹配/高阶函数)共存。”
- “语言演进原则:向后兼容性优先,新特性需解决真实痛点而非炫技。”
附:版本特性对比
- **“C# 8.0的核心突破:
- 可空引用类型(减少
NullReferenceException
); - 异步流(
IAsyncEnumerable
); - 模式匹配增强(
switch
表达式)。”**
- “与Java对比:C#的
record
类型(9.0)简化不可变对象,类似Java的record
但更早支持属性模式。” - “未来方向:更低开销的零成本抽象(如更深度
ref
支持)、更智能的编译器分析。”