.net中 关于反射的详细介绍(3)

1.GetCustomAttributes() :获得与主调对象关联的自定义特性列表。
2.IsDefined(): 确定是否为主调对象定义了相应的特性。
3.GetCustomAttributesData():返回有关自定义特性的信息(特性稍后便会提到)
 当然除了MemberInfo类定义的方法和属性外,Type类自己也添加了许多属性和方法:如下表(只列出一些常用的,太多了,自己可以转定义Type类看下)

Type类定义的方法

 

方法

 

功能

 

ConstructorInfo[]  GetConstructors()

 

获取指定类型的构造函数列表

 

EventInfo[]   GetEvents();

 

获取指定类型的时间列

 

FieldInfo[]   GetFields();

 

获取指定类型的字段列

 

Type[]   GetGenericArguments();

 

获取与已构造的泛型类型绑定的类型参数列表,如果指定类型的泛型类型定义,则获得类型形参。对于正早构造的类型,该列表就可能同时包含类型实参和类型形参

 

MemberInfo[]   GetMembers();

 

获取指定类型的成员列表

 

MethodInfo[]   GetMethods();

 

获取指定类型的方法列表

 

PropertyInfo[]   GetProperties();

 

获取指定类型的属性列表

 

下面列出Type类定义的常用的只读属性

Type类定义的属性

 

属性

 

功能

 

Assembly   Assembly 

 

获取指定类型的程序集

 

TypeAttributes   Attributes

 

获取制定类型的特性

 

Type   BaseType

 

获取指定类型的直接基类型

 

String  FullName

 

获取指定类型的全名

 

bool   IsAbstract

 

如果指定类型是抽象类型,返回true

 

bool   IsClass

 

如果指定类型是类,返回true

 

string   Namespace

 

获取指定类型的命名空间

 


 使用反射

       上面的列术都是为了,这里的使用。

通过使用Type类定义的方法和属性,我们能够在运行时获得类型的各种具体信息。这是一个非常强大的功能。我们一旦得到类型信息,就可以调用其构造函数,方法,和属性。可见,反射是允许使用编译时不可用的代码的。

由于Reflection API非常多,这里不可能完整的介绍他们(这里如果完整的介绍,据说要一本书,厚书)。但是,Reflection API是按照一定逻辑设计的。因此,只要知道部分接口的使用方法,就可以举一反三的使用剩余的接口。

这里我列出四种关键的反射技术:


1.获取方法的信息
2.调用方法
3.构造对象
4.从程序集中加载类型

 获取方法的相关信息

          一旦有了Type对象就可以使用GetMethodInfo()方法获取此类型支持的方法列表。该方法返回一个MethodInfo 对象数组,MethodInfo对象描述了主调类型所支持的方法,他位于System.Reflection命名空间中

MethodInfo类派生于MethodBase抽象类,而MethodBase类继承了MemberInfo类。因此我们能够使用这三个类定义的属性和方法。例如,使用Name属性得到方法名称。这里有两个重要的成员:


1. ReturnType属性  :为Type类型的对象,能够提供方法的返回类型信息
2. GetParameters()方法  :返回参数列表,参数信息以数组形式保存在PatameterInfo对象中。PatameterInfo类定义了大量描述参数信息的属性和方法。这里也列出两个常用的属性 :Name(包含参数名称信息的字符串),ParameterType(参数类型的信息)。
下面代码,我将使用反射获得类中所支持的方法,还有方法的信息。

复制代码 代码如下:


View Code

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgpds.html