.NET 反射机制全解析
1. 反射概述
反射是.NET 中一项强大的功能,CLR(公共语言运行时)掌握着程序定义和使用的类型的大量信息。它要求所有程序集提供详细的元数据,描述每个类型的每个成员,包括私有实现细节。反射 API 允许我们访问这些详细的类型信息,使代码能够发现运行时可见的所有内容,还能利用反射来执行操作,比如调用方法、在运行时生成代码等。
反射在可扩展框架中特别有用,例如 Visual Studio 的属性面板就利用反射来发现组件提供的公共属性。许多基于反射的框架不仅能自动发现所需信息,还允许组件显式地丰富这些信息,通常通过特性来实现。
2. 反射类型
反射 API 在System.Reflection命名空间中定义了各种类,这些类的结构关系反映了程序集和类型系统的工作方式。例如,TypeInfo类表示一个类型,它有一个Assembly属性,返回该类型所在的程序集对象;反之,通过Assembly类的DefinedTypes属性可以发现程序集中定义的所有类型。
以下是一些重要的反射类型及其关系:
| 类型 | 描述 |
| ---- | ---- |
|MemberInfo| 是所有可作为其他类型成员的类型的共享基类,提供了成员的通用功能,如Name、DeclaringType和Module等属性。 | <