.NET反射与动态代码生成:深入System.Reflection.Emit命名空间
1. 反射概述
在.NET中,反射具有多种用途。一方面,可利用 System.Reflection
命名空间下的类型进行运行时类型检查和后期绑定对象创建;另一方面, System.Reflection.Emit
命名空间支持动态代码创建。动态代码创建意味着程序员能够在代码中通过编程方式创建如方法和事件等代码结构,这些代码元素可添加到由 AssemblyBuilder
对象表示的动态程序集中。动态程序集既可以保存为PE(可移植可执行)文件(通常为DLL形式),也可以直接发射到内存中立即使用,但会牺牲持久性(当包含的 AppDomain
终止时,仅存在于内存中的类型会消失)。
2. TypeFilter委托
TypeFilter
是一个委托,它映射到一个函数,该函数会逐个应用于 System.Type
对象列表。过滤器会遍历列表,如果委托返回 true
,则过滤后的列表包含该对象,否则将其排除。
public delegate bool TypeFilter(Type m, object filterCriteria);
此委托会传递给 Module.FindTypes()
和 System.Type.FindInterface