反射

 1.反射:反射是一个运行库类型发现的过程,使用反射,可以通过编程使用一个友好的对象模型得到与通过ildasm.exe显示的相同的元数据信息,例如,通过反射可以得到一个给定的.dll/.exe程序集所包含的所有类型的列表,包括类型定义的方法、字段、属性和事件,也可以动态发现一组给定类型支持的的接口、方法参数、基类、命名空间和清单数据等。

System.Reflection中包含主要的成员信息:

1)Assembly:该抽象类包含了很多静态方法,可以加载、了解和操纵一个程序集

2)AssemblyName:程序集身份的细节,包括版本信息、区域信息

3)EventInfo:该抽象类保存给定事件的信息

4)FieldInfo:该抽象类保存给定字段的信息

5)MemberInfo:抽象类基类,为EventInfo、FieldInfo、ParameterInfo、PropertyInfo定义公共的行为

6)MethodInfo:该抽象类保存给定方法的信息

7)Module:该抽象类可以使访问多文件程序集中给定的模块

8)ParameterInfo:该抽象类保存给定参数的信息

9)PropertyInfo:该抽象类保存给定属性的信息

2.Syetem.Type定义了很多成员可以检查很多类型的元数据,返回的类型大多位于System.Reflection中,例如Type.GetMethods返回一个类型为MethodInfo的数组。

1)使用System.Object.GetType(),返回当前对象元数据的Type类的实例,得到编译时类型的信息,并且要有类型实例。

2)也可以通过typeof获取类型的信息,这种方法不需要先建立实例。

3)使用System.Type.GetType(),指定类型的完全限定名,同时方法可以被重载,可以指定两个布尔参数,一个控制是否抛出异常,一个是否区分大小写。

注意:如果需要得到外部私有程序集的类型数据时,字符串参数需要使用类型完全限定名,加上类型所在程序集的名字,逗号隔开,字符串也可以指定一个+标记来表示嵌套类型。

3.反射方法

Type.GetMethods()可以获取类型定义的每个方法的名称。

4.反射字段和属性

Type.GetFields()可以获取类型定义的字段。

Type.GetProperties()可以获取类型定义的属性。

5.反射实现的接口

Type.GetInterfaces()可以输出类型支持的接口名称。

6.显示其他辅助信息

可以输出类型的其他信息,例如是否是泛型(IsGenericTypeDefinitoon)、是否密封(IsSealed)、是否抽象(IsAbstract)、基类(BaseType)是什么等。

7.反射泛型类型

调用Type.GetType()来获取泛型类型的元数据描述,必须加上反勾号`+数字来表示支持的类型参数个数,如果希望输出List<T>,就要传入字符串System.Collection.Generic.List`1。

如果希望反射类型DicTinary<Tkey,Tvalue>,需要传入字符串System.Collection.Generic.DicTinary`2。

8.反射方法参数和返回值

MethodInfo提供了ReturnType属性和GetParameters()方法。

 

posted @ 2018-09-24 22:07  青青vvn  阅读(202)  评论(0编辑  收藏  举报