反射⚓︎
01 反射概述⚓︎
反射(Reflection)是指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块、模块包含类型,而类型包含成员。 反射提供了封装程序集、模块和类型的对象,可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后,调用类型的方法或访问其字段和属性。
C# 中反射具有以下用途:
- 在运行时查看视图属性信息;
- 检查装配中的各种类型并实例化这些类型;
- 在后期绑定到方法和属性;
- 在运行时创建新类型,然后使用这些类型执行一些任务。
.NET 的 System.Reflection
命名空间下提供了反射技术使用的类,使用它们并结合 System.Type
使你能够获取有关加载的程序集和其中定义的类型的信息,如类、接口和值类型(即结构和枚举):
Class | Description |
---|---|
Assembly |
定义和加载程序集,加载程序集清单中列出的模块,以及在此程序集中定位一个类型并创建一个它的实例 |
Module | 发现信息,如包含模块的程序集和模块中的类,还可以获取所有全局方法或模块上定义的其它特定的非全局方法 |
ConstructorInfo | 发现信息,如名称、参数、访问修饰符(如 public 或 private )和构造函数的实现详细信息(如 abstract 或 virtual ) |
MethodInfo | 发现信息,如名称、返回类型、参数、访问修饰符(如 public 或 private )和方法的实现详细信息(如 abstract 或 virtual ) |
FieldInfo | 发现信息,如名称、访问修饰符(如 public 或 private )和一个字段的实现详细信息 (如 static );并获取或设置字段值 |
EventInfo | 发现信息(如名称、事件处理程序的数据类型、自定义特性、声明类型以及事件的反射的类型),并添加或删除事件处理程序 |
PropertyInfo | 发现信息(如名称、数据类型、声明类型,反射的类型和属性的只读或可写状态),并获取或设置属性值 |
ParameterInfo | 发现信息,如参数的名称、数据类型、参数是输入参数还是输出参数以及参数在方法签名中的位置 |
CustomAttributeData | 发现有关自定义特性的信息,使你能够检查特性,而无需创建它们的实例 |