reflection_1

原创 2002年10月14日 09:25:00

通过反射命名空间中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。您也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


反射概述


公共语言运行库加载器管理应用程序域。这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。


程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。反射通常具有以下用途:



  • 使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。


  • 使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。


  • 使用 ConstructorInfo 了解如下的类似信息:构造函数的名称、参数、访问修饰符(如 publicprivate)和实现详细信息(如 abstractvirtual)等。使用 Type 对象的 GetConstructors 或 GetConstructor 方法来调用特定的构造函数。


  • 使用 MethodInfo 来了解如下的类似信息:方法的名称、返回类型、参数、访问修饰符(如 publicprivate)和实现详细信息(如 abstractvirtual)等。使用 Type 对象的 GetMethods 或 GetMethod 方法来调用特定的方法。


  • 使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 publicprivate)和实现详细信息(如 static)等;并获取或设置字段值。


  • 使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。


  • 使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。


  • 使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。


System.Reflection.Emit 命名空间的类提供了一种特殊形式的反射,使您能够在运行时构造类型。


反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。


反射还有其他一些用途。JScript 等语言编译器使用反射来构造符号表。System.Runtime.Serialization 命名空间中的类使用反射来访问数据并确定要持久保存的字段。System.Runtime.Remoting 命名空间中的类通过序列化来间接地使用反射。


查看类型信息


System.Type 类对于反射起着核心的作用。当反射请求加载的类型时,公共语言运行库将为它创建一个 Type 对象。您可以使用 Type 对象的方法、字段、属性和嵌套类来查找有关该类型的所有信息。


在使用 Assembly.GetType 或 Assembly.GetTypes 时传入所需类型的名称,可以从尚未加载的程序集中获取 Type 对象。使用 Type.GetType 可从已加载的程序集中获取 Type 对象。使用 Module.GetType 和 Module.GetTypes 可获取模块 Type 对象。


以下代码示例显示在获取程序集的 Assembly 对象和模块时所必需的语法。


以下示例代码说明如何从已加载的程序集中获取 Type 对象。


获取 Type 对象之后,可以通过多种方法来了解有关该类型成员的信息。例如,通过调用 Type.GetMembers 方法(该方法将获取对当前类型的每个成员进行描述的一组 MemberInfo 对象),您可以获取有关该类型的所有成员的信息。


您也可以在 Type 类上使用方法,以检索有关按名称指定的一个或多个构造函数、方法、事件、字段或属性的信息。例如,Type.GetConstructor 封装当前类的特定构造函数。


如果具有 Type 对象,则可以使用 Type.Module 属性来获取一个封装该类型所在模块的对象。使用 Module.Assembly 属性可查找封装模块所在程序集的对象。使用 Type.Assembly 属性可直接获取封装类型的程序集。


System.Type 和 ConstructorInfo


以下代码示例显示如何列出一个类(此示例中为 String 类)的构造函数。


MemberInfo、MethodInfo、FieldInfo 和 PropertyInfo


使用 MemberInfo、MethodInfo、FieldInfo 或 PropertyInfo 对象可获取有关类型的方法、属性、事件、字段的信息。


以下代码示例使用 MemberInfo 来列出 System.IO.File 类中的成员数量并使用 System.Type.IsPublic 属性来确定该类的可见性。


以下代码示例调查指定成员的类型。它对 MemberInfo 类的一个成员执行反射,然后列出其类型。


以下示例代码使用所有的反射 *Info 类以及 BindingFlags 来列出指定类的所有成员(构造函数、字段、属性、事件和方法),并将这些成员划分为静态和实例类别。


java_reflection_in_action_(manning-2005).part1

  • 2009年04月08日 22:05
  • 1024KB
  • 下载

Java反射经典实例 Java Reflection Cookbook[1].pdf

  • 2011年03月09日 09:52
  • 172KB
  • 下载

Reflection-v1-5-1

  • 2012年11月14日 16:57
  • 6.78MB
  • 下载

java反射机制(1)- 知识点总结Java Reflection API操作

转载需注明出处:java反射机制(1)- 知识点总结Java Reflection API操作1 什么是反射机制  什么是反射机制?简单点说就是程序在运行时能够获取自身的信息。在java中,只要给定类...
  • Mark_LQ
  • Mark_LQ
  • 2015年11月28日 17:02
  • 1817

java se 学习笔记 之 reflection(反射机制之Array_1)2

1. 利用反射机制得到java.lang.String类的Class类对象 Class classType = Class.forName("java.lang.String"); 2.利用Str...
  • tongle_deng
  • tongle_deng
  • 2011年08月18日 10:11
  • 347

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(3.1)——辐射学(Radiometry)

前面,我们已经学习了各种反射模型。罗列如下。 漫反射模型: 高光反射模型: 根据这些模型,我们已经可以进行编程,然后生成图形。但是,为了加强这些模型的数学基础...
  • libing_zeng
  • libing_zeng
  • 2017年02月23日 09:41
  • 423

问题六十八:BRDF——(着色模型(shading model)(1)——反射模型(reflection model)(3.2))

1 BRDF 1.1 BRDF 在前一章节,我们已经知道,在给图形着色时,反射光线的辐射率(Radiance)即为颜色值。结合之前的反射模型,我们知道:反射光线在某方向的辐射率可以根据入射光线...
  • libing_zeng
  • libing_zeng
  • 2017年02月23日 15:34
  • 509

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(1)——概述

“反射模型”和“光照模型”   这两个概念好像经常被等价使用。作者为了更好理解其他相关概念,对“反射模型”和“光照模型”做如下区分:(将“光反射”分成三个部分:入射光、入射光和表面的相互作用、反射光)...
  • libing_zeng
  • libing_zeng
  • 2017年02月19日 10:25
  • 502

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.2)——高光反射(specular reflection)

和diffuse reflection对应的是specular reflection。一直以来,本人都将“specular reflection”理解为“镜面反射”。但是,现在来写总结时,发现牵涉到一...
  • libing_zeng
  • libing_zeng
  • 2017年02月20日 21:57
  • 390

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)

68.1.2.1 漫反射光 前面,我们有这么一张图:   为了突出光子和表面里面的原子相互作用,还是用画得更为夸张的图好了。(注意:只关注蓝色光线。) 关于“漫反射光”(上图中的蓝色反射光)...
  • libing_zeng
  • libing_zeng
  • 2017年02月19日 15:51
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:reflection_1
举报原因:
原因补充:

(最多只允许输入30个字)