zoukankan      html  css  js  c++  java
  • C#反射机制

    1.反射的定义:

    审查元数据并收集关于它的类型信息的能力。元数据(编译后的最基本的数据单元)是一大堆表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表和一个方法定义表等。
    System.Reflection命名空间包含的几个类允许你反射这些源数据表的代码。

    System.Reflection.Assembly;
    System.Reflection.MemberInfo;
    System.Reflection.EventInfo;
    System.Reflection.FieldInfo;
    System.Reflection.MethodBase;
    System.Reflection.ConstructorInfo;
    System.Reflection.MethodInfo;
    System.Reflection.PropertyInfo;

    以下是上面几个类的使用方法:
    Assembly:定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
    Module:了解包含模块的程序集以及模块中类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
    ConstructorInfo:了解构造函数的名称、参数、访问修饰符(publi或Private)和实现详细信息(abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。
    MethodInfo:了解方法的名称、放回类型、参数、访问修饰符和实现详细信息等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
    FieldInfo:了解字段名称、访问修饰符和实现详细信息(static等),并获取或设置字段值。
    EventInfo:了解事件名称、时间处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
    PropertyInfo:了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
    ParameterInfo:了解参数名称、数据类型、是输入还是输出参数,以及参数在方法签名中的位置等。

    2.反射的层次模型:

    3.反射的作用:
    1.可以使用反射动态创建类型实例,将类型绑定到现有对象,或从现有对象中获取类型。
    2.应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
    3.反射主要应用于类库,这些类库需要知道一个类型的定义,以便提供更多的功能。

    4.应用要点:
    1.现实应用程序中很少有应用程序需要使用反射类型。
    2.使用反射动态绑定需要牺牲性能。
    3.有些元数据信息是不能通过反射获取的。
    4.某些反射类型是专门为那些clr开发编辑器的开发使用的,所以不是所有的反射类型都适合每个人。

    5.反射的性能:
    使用反射时clr需要做更多的工作:校验参数、检查权限等等、所以速度是非常慢的。所以尽量不要使用反射,对于一个动态构造类型(晚绑定)的应用程序,可以采取以下几种方式代替。
    1.通过类的继承关系。让该类型从一个编译时可知的基础类型派生出来,在运行时生成该类型的一个实例,将对其的引用放到其基础类型的一个变量中,然后调用该基础类型的虚方法。
    2.通过接口实现。在运行时,构建该类型的一个实例,将对其的引用放到其接口类型的一个变量中,然后调用该接口定义的虚方法。
    3.通过委托实现。让该类型实现一个方法,其名称和原型都与一个在编译时就已知的委托相符。在运行时先构造该类型的实例,然后在用该方法的对象及名称构造出该委托的实例,接着通过委托调用你想要的方法。这个方法相对于前面两个方法所做的工作要多一些,效率更低。

  • 相关阅读:
    Java中关于String类型的10个问题
    关于Linux中后台运行程序(&)退出时收不到SIGHUP信号的说明
    《Javascript DOM编程艺术》学习笔记 第8章 充实文档的内容
    《Javascript DOM编程艺术》学习笔记 第7章 动态创建标记
    《Javascript DOM编程艺术》学习笔记 第1-6章
    golang: 读取已关闭的缓冲型channel的表现
    关于《汇编语言(王爽)》程序6.3使用16个dw 0的问题
    关于寄存器的一些笔记
    img格式镜像转ISO格式
    深入理解计算机操作系统:第1章 计算机系统漫游(学习笔记)
  • 原文地址:https://www.cnblogs.com/ecosu/p/4285960.html
Copyright © 2011-2022 走看看