| 作者: | Kevin Hazzard and Jason Bock |
| 语言: | 英文 |
| 出版年份: | 2013 |
| 下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
Metaprogramming in .NET 是 Manning 出版社 2013 年出版的 .NET 元编程专著,作者 Kevin Hazzard(前 Microsoft C# MVP)和 Jason Bock(Microsoft C# MVP,《CIL Programming》作者)。本书不是 C# 入门教程,而是一本系统讲解"如何用代码操控代码"的进阶指南——覆盖反射、代码生成、IL 重写、表达式树和动态语言运行时等核心技术,帮助 .NET 开发者突破编译时限制,在运行时动态生成、修改和执行代码。
全书分三部分递进。第一部分(第1-2章)建立元编程概念基础,通过脚本执行、反射绑定、代码生成和动态对象四类示例定义元编程的边界,并深入反射 API 的实用场景(WCF 类型注册、动态 ToString、任意方法调用)。第二部分(第3-7章)是全书核心,系统讲解五种代码生成技术:T4 模板引擎的声明式代码生成、CodeDOM 的抽象代码图模型、Reflection.Emit 的 IL 级动态生成、LINQ 表达式树的运行时构建与编译、以及基于 Mono.Cecil 的 IL 重写与代码织入。第三部分(第8-10章)转向运行时动态能力与工具生态:DLR 的动态对象与多语言脚本宿主、Boo/Nemerle 等元编程友好语言、Spring.NET 与 PostSharp 等 AOP 框架,以及 Roslyn 编译器 API 的前瞻性探索。
| 章节 | 主题 | 核心内容 |
|---|---|---|
| 第1章 | 元编程概念 | 四种范式(脚本/反射/代码生成/动态对象)的定义与示例,SOLID 原则与元编程的关系,DSL 的价值与代价 |
| 第2章 | 反射 | Type/Assembly/MethodInfo/PropertyInfo 元数据体系,自定义属性读取,动态方法调用,反射性能优化与 PropertyInfo 缓存策略 |
| 第3章 | T4 模板引擎 | 模板语法(指令块/控制块/表达式块/文本块),缩进处理,Visual Studio 单文件生成器集成,动态生成 VB 代码 |
| 第4章 | CodeDOM | 代码图对象模型(命名空间/类/构造函数/属性/语句),CodeProvider 多语言支持,动态编译程序集与运行时调用 |
| 第5章 | Reflection.Emit | 程序集内部结构与元数据布局,IL 操作码速览(变量/字段/对象/方法调用/控制流/异常),动态程序集创建与 peverify 验证,DynamicMethod 轻量生成与缓存 |
| 第6章 | 表达式树 | 代码即数据理念,LINQ Expressions 的运行时构建与编译,表达式调试与树变异,遗传编程在表达式演化中的实验性应用 |
| 第7章 | IL 重写 | 代码注入的应用场景(重复模式消除/Code Contracts),Mono.Cecil 代码织入流程,MSBuild 任务集成,注入代码的调试符号处理 |
| 第8章 | DLR 动态运行时 | ExpandoObject 动态属性扩展,DynamicObject 方法分发重写,OData 动态解析实战,脚本引擎宿主模型(Runtime/Engine/Scope),规则引擎集成 |
| 第9章 | 语言与工具 | Boo 的元编程特性与 Nemerle 的宏系统,Spring.NET 的属性拦截,PostSharp 的对象创建拦截与 Equals/GetHashCode 自动实现 |
| 第10章 | Roslyn 编译器 | 编译器从黑盒到白盒的转变,脚本引擎与动态程序集生成,Code Issue 诊断与 Code Action 修复,代码自动重排重构 |
适合有 C# 和 .NET 基础、希望深入运行时机制的进阶开发者。如果你在开发框架、类库、代码生成器或开发者工具,本书提供的反射、Emit 和表达式树技能是必备基础。也适合对 AOP、DSL 和编译器技术感兴趣的架构师。需要扎实的 C# 功底,不适合初学者。
Metaprogramming in .NET 是 .NET 元编程领域最系统、最实战的著作。两位作者将反射、Emit、表达式树和 IL 重写等硬核主题讲得清晰可操作,每个技术点都配有完整代码示例。虽然出版于 2013 年,但 .NET 的反射和表达式树 API 保持高度稳定,书中核心技术至今有效。Roslyn 章节基于早期 CTP 版本,建议配合最新文档阅读。对于 .NET 框架和工具库开发者,本书是必读之作。