zoukankan      html  css  js  c++  java
  • 反射

     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()方法。

  • 相关阅读:
    【转】依赖注入那些事儿
    【转】Visual Studio單元測試小應用-測執行時間
    【转】 代码设计敏捷开发三部曲
    【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59
    【转】 C#获取当前程序运行路径的方法集合
    CSVHelper读出乱码 解决方案
    CvsHelper 使用指南
    【转】 C# ListView实例:文件图标显示
    【转】C# winform 加载网页 模拟键盘输入自动接入访问网络
    基于MHA的MySQL高可用
  • 原文地址:https://www.cnblogs.com/qqvvn/p/9696943.html
Copyright © 2011-2022 走看看