跳转至

反射⚓︎

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 发现有关自定义特性的信息,使你能够检查特性,而无需创建它们的实例