c 中如何理解 反射技术

上传人:小** 文档编号:89122898 上传时间:2019-05-18 格式:DOC 页数:5 大小:17.50KB
返回 下载 相关 举报
c 中如何理解  反射技术_第1页
第1页 / 共5页
c 中如何理解  反射技术_第2页
第2页 / 共5页
c 中如何理解  反射技术_第3页
第3页 / 共5页
c 中如何理解  反射技术_第4页
第4页 / 共5页
c 中如何理解  反射技术_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《c 中如何理解 反射技术》由会员分享,可在线阅读,更多相关《c 中如何理解 反射技术(5页珍藏版)》请在金锄头文库上搜索。

1、C 中如何理解反射技术在搜索c#中反射技术时看到这样一篇文章,写的很有意思,下面是全文你首先要理解一下概念:一类型(Type)对象是什么比如objectx;x是对象,object就是它的类型,在程序中如何描述类型这个概念呢?就是Type(System.Type)。要获取某个类的类型可以用typeof()操作符objecta;objectb;DataTablet;aType=typeof(object);TypebType=typeof(object);tType=typeof(DataTable);aType=bType!=tType;二程序集(Assembly)就是你IDE生成的.exe或.

2、dll文件的运行时就叫程序集。所有的代码都在程序集中。你可以通过Assembly.Load()系列函数动态加载程序集(这一步是动态+载代码的前提,因为所有的代码都在程序集中)。三动态加载我们普通调用代码是:对象名.方法名(参数列表);classavoidfunc(intx)publicstaticvoidMain(stringargs)/创建对象aa1=newa();/调用函数a1.func(1);用反射动态调用代码是/加载程序集System.Reflection.Assemblyasm=Assembly.LoadFile(assemblyPath);/获取类型TypeaType=asm.Ge

3、tType(名字空间.类名);/获取没有参数的构造函数System.Reflection.ConstructorInfoconn=t.GetConstructor(newType0);/调用没有参数的构造函数,Invoke返回object它其是a类objecta1=conn.Invoke(newobject0);/获取参数类型为int,函数名为func的方法MethodInfomethod=t.GetMethod(func,newTypetypeof(int);/在a1上调用func方法,参数为1method.Invoke(a1,newobject1);动态调用(后一种方法)比静态调用更复杂,

4、而且效率大概低20倍(网上有个哥们好像测试过)。只有在特殊的时候才调用动态加载动态调用-比如,你的主程序启动的时候子模块还没有,要根据登陆信息下载子模块代码并调用子模块代码,就只能用动态+载来实现了.四元数据.net生成的IL代码中标明了在这个(exe,dll)文件中所有的class(类)method(方法)Attribute(属性)Property(类属性)的签名和调用方法信息,这些信息就叫做元数据。所谓的Reflection反射,就是利用元数据,可以了解到某个assembly(基本等同文件)中的class。(就是上面那一串咚咚)信息和调用方法。五.netframework在.netfram

5、ework中反射类基本都在System.Reflection中。System.Type是反射的核心类.与它相关的还有System.Attribute命名空间。用生活中的例子来讲解什么是反射以及反射的基本使用方式。我先问大家一个问题:集结号中谷子地穿的南朝鲜军服从哪儿来?显然不是临时找裁缝赶制的,肯定是从俘虏身上扒下来的。好,那我们就来补充一点儿集结号的镜头看看什么是反射。一天傍晚,一名又饥又渴的南朝鲜掉队士兵在乡间小路上蹒跚地走着,他甚至都快扛不动身上的枪了,也不知道队伍在哪里,只好认准一个方向努力寻找。不许动!从路边草丛中跳出的两名埋伏着的中国士兵喝道,这名南朝鲜士兵本来就精疲力尽,哪受得了

6、这番惊吓,当时就一屁股坐在地上了。中国士兵把他押回营部并向上级报告,他们在附近巡逻的时候意外俘获一名南朝鲜掉队士兵,听候处置。这件事情被上报到王团长那里,王团长正拿着放大镜跟几名军官在地图前研究作战方案,听到这件事,不紧不慢地跟他身边的高连长说道:高诚啊,你去看看,没啥大问题就送到后方战俘营去。是!高连长接到命令便转身出去了。高连长来到一件狭小的房间,那名南朝鲜士兵正半躺在地上,手里拿着中国士兵给他的馒头和水,一口一口地嚼着,看到高连长进来了,眼睛里流露出紧张和恐惧的神情。高连长简单介绍了中国方面善待俘虏的政策,便开始审问他-注意,反射开始了!哪儿的?联合国军李承晚系部队3团2排1班。叫什么名

7、字?思密达。这次执行什么任务?潜入贵军阵地并指引炮兵进行射击。一番软硬兼施之后,高连长掌握了这个小兵所有的信息,整理好材料去跟王团长汇报去了,而这个小兵被带到一个小屋子里继续啃馒头去了,身上的行头也被换了下来,换上了专门为战俘准备的棉衣。高连长一手拿着笔录材料,一手拎着南朝鲜士兵的全套行头去见了王团长,汇报之后王团长会心地笑了:小高啊,不错,你父亲当初把你交给我,我就叫他放心,你是块好料子,怎么样,我没说错吧,呵呵,不过你也莫要骄傲,我们不能轻敌,这样,你带着这身行头去找谷子地,叫他换上之后连夜潜入敌方阵地,敌人不是想拿炮弹砸我们吗,那我们就用他们的方式,先发制人,让老谷指引我军炮火明日凌晨发

8、起总攻。谷子地换上了这身洋行头,揣了半条烟就出发了,他潜入敌方阵地后冷静地掏出敌人的望远镜进行了周密地观察,并通过无线电给后方友军传递射击参数,成功地引导我军取得了这次重大胜利。上面的故事情节描述得有点儿多了,赶紧来看代码吧,首先,我们得有个倒霉的南朝鲜士兵做引子:1:namespaceUN2:3:internalclassSouthKoreaArmy4:5:publicstringNameget;set;6:7:publicstringSearch(stringdestination)8:9:returnOK,fire!;10:11:12:然后,我们用代码来实现谷子地所完成的行动:1:int

9、ernalclassChineseArmy2:3:publicstaticvoidAction(objectsoldier)4:5:Typetype=soldier.GetType();6:objectziDiGu=Activator.CreateInstance(type);7:MethodInfomethodInfo=type.GetMethod(Search);8:9:Console.WriteLine(methodInfo.Invoke(ziDiGu,newobjectPosition);10:11:这段代码很好理解,第5行我们审问了被俘的南朝鲜士兵并得到了他提供的信息和服装,然后让老谷用他的服装化装成南朝鲜士兵。第7行,小样,你不是想侦查我吗,好,咱就来个以牙还牙,用你的方式来搞定你!接下来,谷子地潜入地方阵地并引导了我军发起总攻。这里展示了反射的一些基本应用,例如获取类型信息、利用获取的类型动态生成对象,并动态调用其方法。当然,反射机制能做的事情不仅仅是这几样,不过目标都一样,由程序自己去获取信息、做出反应。在不用担心性能开销的情况下,反射可以使你的程序更加灵活强大!完美结合了电影素材与技术原理。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号