C#8.0本质论(马克·米凯利斯)

书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:

一、语言基础

  1. “C#的类型系统分为值类型(栈分配,如int)和引用类型(堆分配,如class),struct是轻量级值类型的核心载体。”
  2. “可空引用类型(Nullable Reference Types)通过string?显式声明可能为null的引用,编译器静态分析减少空引用异常。”

二、异步编程

  1. async/await的本质是状态机转换,Task表示尚未完成的操作,ValueTask优化高频低耗场景。”
  2. IAsyncEnumerable<T>支持异步流式数据处理,await foreach逐项消费异步序列。”

三、模式匹配

  1. “模式匹配的进化:switch表达式支持属性模式(case { Length: >5 })、元组模式等,取代多层if-else。”
  2. “递归模式匹配解构复杂对象:if (obj is Employee { Name: string name, Dept: "IT" })。”

四、接口与默认实现

  1. “C# 8.0允许接口提供默认方法实现(default关键字),平衡抽象与复用,但需警惕‘钻石继承’问题。”

五、范围与索引

  1. Index类型表示从首(^0)或尾(^1)的偏移,Range定义切片区间(array[1..^1]),简化集合操作。”

六、面向对象

  1. “只读struct成员(readonly修饰)确保方法不会修改状态,编译器可做激进优化。”
  2. using声明(无大括号)简化资源管理,作用域结束时自动释放。”

七、函数式特性

  1. “本地函数(Local Functions)封装方法内复用逻辑,优于private方法因可捕获外层变量。”
  2. “静态本地函数(static修饰)禁止捕获上下文变量,提升性能与可预测性。”

八、性能优化

  1. Span<T>Memory<T>提供对连续内存的统一视图,支持栈/堆/原生内存的高效操作。”
  2. ref struct限制类型仅分配在栈上,避免GC开销,但不可装箱或跨await使用。”

九、元编程

  1. “源代码生成器(Source Generators)在编译时生成代码,替代部分运行时反射,提升性能。”

十、设计哲学

  1. “C#的设计平衡:面向对象根基(封装/继承/多态)与函数式特性(不可变/模式匹配/高阶函数)共存。”
  2. “语言演进原则:向后兼容性优先,新特性需解决真实痛点而非炫技。”

附:版本特性对比

  1. **“C# 8.0的核心突破:
  • 可空引用类型(减少NullReferenceException);
  • 异步流(IAsyncEnumerable);
  • 模式匹配增强(switch表达式)。”**
  1. “与Java对比:C#的record类型(9.0)简化不可变对象,类似Java的record但更早支持属性模式。”
  2. “未来方向:更低开销的零成本抽象(如更深度ref支持)、更智能的编译器分析。”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注