反射机制
最近学习公司框架的时候碰到很多以前没深入学习的技术,索性一个个学下去。首先是反射,在框架里面主要通过反射获取接口实例。
反射的层次模型:
反射的作用:
1、动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
3、反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
通过反射机制我们可以知道未知类型对象的类型信息,以及调用未知dll文件。
反射的实例:
//待编辑
反射的性能:
使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr需要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的。尽量不要使用反射进行编程,对于打算编写一个动态构造类型(晚绑定)的应用程序,可以采取以下的几种方式进行代替:
1、通过类的继承关系。让该类型从一个编译时可知的基础类型派生出来,在运行时生成该类 型的一个实例,将对其的引用放到其基础类型的一个变量中,然后调用该基础类型的虚方法。
2、通过接口实现。在运行时,构建该类型的一个实例,将对其的引用放到其接口类型的一个变量中,然后调用该接口定义的虚方法。
3、通过委托实现。让该类型实现一个方法,其名称和原型都与一个在编译时就已知的委托相符。在运行时先构造该类型的实例,然后在用该方法的对象及名称构造出该委托的实例,接着通过委托调用你想要的方法。这个方法相对与前面两个方法所作的工作要多一些,效率更低一些。