"CLR via C#" 是一本深入探讨微软.NET框架公共语言运行库(Common Language Runtime, CLR)和C#编程的书籍。这本书分为五个部分,详细介绍了CLR的基础、设计类型、核心类型、CLR设施以及多线程编程。
第一部分:CLR基础
- 第一章讲述了CLR的执行模型,包括C#的(optimizer)优化开关和(debug)调试开关如何相互作用。
- 第二章加强了关于Win32清单信息和版本资源信息的讨论。
- 第三章涵盖了共享程序集和强名程序集,新增了TypeForwardedToAttribute和TypeForwardedFromAttribute的讨论。
第二部分:设计类型
- 第四章是类型基础,无新话题。
- 第五章讨论了基本类型、引用类型和值类型,扩展了checked和unchecked代码的讨论,并加入了关于BigInteger类型和C# 4.0动态类型的讨论。
- 第六章到第十二章涵盖了类型和成员的基本概念,如常量、字段、方法、参数、属性、事件和泛型,分别增加了扩展方法、部分方法、可选/命名参数、隐式类型局部变量、自动实现的属性、对象和集合初始化器、匿名类型、System.Tuple类型和ExpandoObject类型的讨论,以及委托和接口的类型参数协变。
- 第十三章讨论了接口,无新话题。
第三部分:核心类型
- 第十四章到第十九章介绍了字符、字符串、枚举、数组、委托、属性等,其中更新了枚举类型实例访问的新方法,数组元素初始化的新段落,以及关于可空值类型的性能讨论。
第四部分:CLR设施
- 第二十章全面改写了异常处理和状态管理,包括代码契约和约束执行区域(CERs),并讨论了在生产效率和可靠性之间权衡的方法。
- 第二十一章自动内存管理,添加了关于C#固定状态如何固定堆中的对象的讨论,更新了弱委托的使用,以及ConditionalWeakTable类、GC收集模式、Full GC通知、垃圾收集模式和延迟模式。
- 第二十二章介绍了CLR托管和应用程序域,包括多个CLR在同一进程中加载的支持、MarshalByRefObject派生类型的性能、跨应用程序域通信的改进、AppDomain监控和首次异常通知。
- 第二十四章是运行时序列化,是一个全新的章节,没有出现在第二版中。
第五部分:线程
- 第二十五章是线程基础知识,涉及为何Windows支持线程、线程开销、CPU趋势、NUMA架构、CLR线程与Windows线程的关系、Thread类、使用线程的原因、线程调度和优先级。
这本书通过深入浅出的方式,全面地讲解了CLR的各个方面,对于想要深入了解.NET框架和C#编程的读者来说是一本宝贵的参考资料。