反射与C实现-最新资料_第1页
反射与C实现-最新资料_第2页
反射与C实现-最新资料_第3页
反射与C实现-最新资料_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、反射与C#实现当你做一个软件可以安装插件的功能, 你连插件的类型名称 都不知道,你怎么实例化这个对象呢?因为程序是支持插件的 (第三方的),在开发的时候并不知道。所以,无法在代码中 New出来,但反射可以,通过反射,动态加载程序集,然后读出 类,检查标记之后再实例化对象,就可以获得正确的类实例。反 射的目的就是为了扩展未知的应用。 比如你写了一个程序, 这个 程序定义了一些接口, 只要实现了这些接口的 dll 都可以作为插 件来插入到这个程序中。 那么怎么实现呢?就可以通过反射来实 现。就是把 dll 加载进内存, 然后通过反射的方式来调用 dll 中 的方法。反射 Reflection ,

2、MFC寸代叫 RTTI (Run time Type Identification )运行时类型识别, 提供一种动态创建对象的能 力。反射( Reflection )是中的重要机制,通过反射,可以在运 行寸获得中每一个类型(包括类、结构、委托、接口和枚举等) 的成员,包括方法、属性、事件,以及构造函数等。还可以获得 每个成员的名称、限定符和参数等。有了反射,即可对每一个类 型了如指掌。如果获得了构造函数的信息,即可直接创建对象, 即使这个对象的类型在编译寸还不知道。程序代码在编译后生成可执行的应用, 我们首先要了解这种 可执行应用程序的结构。应用程序结构分为应用程序域一程序 集模块类型成员几个

3、层次, 公共语言运行库加载器管理应 用程序域,这种管理包括将每个程序集加载到相应的应用程序域 以及控制每个程序集中类型层次结构的内存布局。在设计模式实现中常使用反射技术, 如采用反射技术可以简 化工厂的实现。 ;通过反射可以将需要实现的子类名称传递给工 厂方法, 这样无须在子类中实现类的实例化; 使用反射可以减少 抽象工厂的子类;采用反射技术可以简化工厂代码的复杂程度, 在项目中, 采用反射技术的工厂已经基本代替了工厂方法; 采用 反射技术可以极大地简化对象的生成, 对以下设计模式的实现也 有很大影响。反射的层次间都是一对多的关系。 使用反射可以使用反射动 态地创建类型的实例, 将类型绑定到现

4、有对象, 或从现有对象中 获取类型;应用程序需要在运行时从某个特定的程序集中载入一 个特定的类型, 以便实现某个任务时可以用到反射; 反射主要应 用与类库, 这些类库需要知道一个类型的定义, 以便提供更多的 功能。调用AppDomain对象的GetAssemblies方法将返回一个由 System.Reflection.Assembly 元素组成的数组。显示的调用一个程序集, system.reflecton.assembly 类型 提供了下面三种方法:1.Load 方法:极力推荐的一种方法, Load 方法带有一个程 序集标志并载入它,Load将引起CLR把策略应用到程序集上, 先后在全局程

5、序集缓冲区, 应用程序基目录和私有路径下面查找 该程序集,如果找不到该程序集系统抛出异常。2.LoadFrom 方法:传递一个程序集文件的路径名(包括扩 展名),CLR会载入您指定的这个程序集,传递的这个参数不能 包含任何关于版本号的信息,区域性,和公钥信息,如果在指定 路径找不到程序集抛出异常。3.LoadWithPartialName :永远不要使用这个方法,因为应 用程序不能确定再在载入的程序集的版本。 该方法的唯一用途是 帮助那些在框架的测试环节使用框架提供的某种行为的客户, 这 个方法将最终被抛弃不用。如果你想要获得一个类型继承的所有接口集合,可以调用 Type 的 FindInte

6、rfaces GetInterface 或者 GetInterfaces 。所 有这些方法只能返回该类型直接继承的接口, 他们不会返回从一 个接口继承下来的接口。 要想返回接口的基础接口必须再次调用 上述方法。使用反射来调用类型或者触发方法, 或者访问一个字段或者 属性时 clr 需要做更多的工作:校验参数,检查权限等等,所以 速度是非常慢的。 所以尽量不要使用反射进行编程, 对于打算编 写一个动态构造类型(晚绑定)的应用程序,可以采取以下的几 种方式进行代替:1. 通过类的继承关系。 让该类型从一个编译时可知的基础类 型派生出来, 在运行时生成该类型的一个实例, 将对其的引用放 到其基础类型的一个变量中,然后调用该基础类型的虚方法。2. 通过接口实现。在运行时,构建该类型的一个实例,将对 其的引用放到其接口类型的一个变量中, 然后调用该接口定义的 虚方法。3. 通过委托实现。 让该类型实现一个方法, 其名称和原型都 与一个在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论