什么是反射 Reflection?
反射,Reflection [rɪˈflekʃn] 。反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问其字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。
反射的用途
需要访问程序元数据中的特性时。
检查和实例化程序集中的类型。
在运行时构建新类型。 使用 System.Reflection.Emit 中的类。
执行后期绑定,访问在运行时创建的类型上的方法。
查看类型信息
System.Type 类是反射的中心。 当反射提出请求时,公共语言运行时为已加载的类型创建 Type。 可使用 Type 对象的方法、字段、属性和嵌套类来查找该类型的任何信息。
使用 Assembly.GetType 或 Assembly.GetTypes 从尚未加载的程序集中获取 Type 对象,传入所需类型的名称。 使用 Type.GetType 从已加载的程序集中获取 Type 对象。 使用 Module.GetType 和 Module.GetTypes 获取模块 Type 对象。
一旦获取 Type 对象,可通过多种方式来查看该类型成员的相关信息。 例如,可调用 Type.GetMembers 方法查找所有类型的成员,获取一组描述当前类型各成员的 MemberInfo 对象。
还可以使用 Type 类上的方法来检索按名称指定的一个或多个构造函数、方法、事件、字段或属性的相关信息。 例如,Type.GetConstructor 封装当前类的特定构造函数。如果有 Type,可使用 Type.Module 属性获取一个封装含该类型的模块的对象。 使用 Module.Assembly 属性查找一个封装含该模块的程序集的对象。 可以获取直接使用 Type.Assembly 属性封装类型的程序集。
声明:
文章内容版权归作者所有,不代表本站任何观点;任何转载需经过作者授权。