
书: 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支持)、更智能的编译器分析。”