发出动态方法和程序集

本节介绍 System.Reflection.Emit 命名空间中的一组托管类型,它们允许编译器或工具在运行时发出元数据和 Microsoft 中间语言 (MSIL),或者也可以允许它们在磁盘上生成可迁移可执行 (PE) 文件。 脚本引擎和编译器是此命名空间的主要用户。 在本节中,由 System.Reflection.Emit 命名空间提供的功能称为反射发出。

反射发出提供了以下功能:

  • 使用 DynamicMethod 类在运行时定义轻量全局方法,然后使用委托执行这些方法。

  • 在运行时定义程序集,然后运行这些程序集并/或将它们保存到磁盘。

  • 在运行时定义程序集,运行这些程序集,然后将它们卸载,并允许垃圾回收来回收它们的资源。

  • 在运行时定义新程序集中的模块,然后运行这些模块并/或将它们保存到磁盘。

  • 在运行时定义模块中的类型,创建这些类型的实例,然后调用其方法。

  • 为定义的模块定义可由调试器和代码分析器这样的工具使用的符号信息。

System.Reflection.Emit 命名空间中的托管类型外,还存在 元数据接口 参考文档中介绍的非托管元数据接口。 托管反射发出比非托管元数据接口提供更强的语义错误检查和更高级别的元数据抽象化。

用于使用元数据和 MSIL 的另一种有用资源是 Common Language Infrastructure (CLI) 文档,尤其是“Partition II: Metadata Definition and Semantics”(第二部分:元数据定义和语义)和“Partition III: CIL Instruction Set”(第三部分:CIL 指令集)。 MSDNEcma Web site(Ecma 网站)上联机提供该文档。

本节内容

参考

  • OpCodes
    列出可用来生成方法体的 MSIL 指令代码。

  • System.Reflection.Emit
    包含用来发出动态方法、程序集和类型的托管类。

  • Type
    介绍 Type 类,该类表示托管反射和反射发出中的类型,并且该类对这些技术的使用非常关键。

  • System.Reflection
    包含用于浏览元数据和托管代码的托管类。

相关章节