C# Reflection.Emit:动态代码生成的利器
一、什么是 Emit?🧐
-
概念:
Emit 是 C# 中的一种动态代码生成技术,通过操作中间语言 (IL) 指令,可以在运行时动态生成类型、方法或程序集。它属于System.Reflection.Emit命名空间的一部分。 -
核心功能:
- 动态生成类、方法和程序集。
- 提供比反射更高效的动态行为支持。
- 适用于动态代理、元编程、高效执行动态逻辑等场景。
二、Emit 的使用场景 🎯
-
动态代理
- 实现 AOP(如日志记录、性能监控)。
- 替代反射以提升性能。
-
元编程
- 动态生成类和方法用于代码自动化,广泛用于 ORM 框架(如 Entity Framework)。
-
性能优化
- 通过直接生成 IL 指令,减少反射调用的开销。
-
动态编译器
- 实现自定义脚本语言(如模板引擎、规则引擎)。
-
插件系统
- 运行时加载和生成程序集用于扩展。
三、Emit 的核心类 🌟
-
AssemblyBuilder:
动态创建程序集(DLL或EXE)。 -
ModuleBuilder:
定义程序集中的模块。 -
TypeBuilder:
动态生成类、接口或结构。 -
MethodBuilder:
动态生成方法。 -
ILGenerator:
核心类,用于生成 IL 指令。
四、Emit 的使用步骤 🛠️
使用 Emit 动态生成代码的典型流程如下:
-
创建程序集和模块:
使用AssemblyBuilder和ModuleBuilder定义动态程序集及模块。 -
定义类型:
使用TypeBuilder动态生成类或接口。 -
定义方法:
使用MethodBuilder定义方法签名及其逻辑。 -
生成 IL 指令:
使用ILGenerator写入 IL 指令。 -
生成类型或程序集:
使用CreateType方法完成类型定义。
五、代码实战:动态创建一个类和方法 💻
示例:动态生成一个 SayHello 方法
using System;
using System.Reflection


6971

被折叠的 条评论
为什么被折叠?



