




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章
反射技术本章学习目标反射技术的基本原理反射技术中的相关类反射的基本应用第9章
反射技术9.1反射机制概述9.2反射相关类9.3案例分析9.1反射机制概述反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括每个成员的名称、限定符、参数方法、属性、事件和构造函数等反射机制的应用反射机制主要用来开发对灵活性和扩展性要求很高的软件系统使用了反射后,程序在更新的时候无需重新编译,只要将更新的Dll换掉即可完成程序的更新和升级。将反射和配置文件相结合,可以开发出功能随意增删改的软件,具备了极大地灵活性和扩展性。反射提高了程序的灵活性,降低了耦合性,提高了自适应能力,同时也大大提高了程序的复用性。9.2反射相关类Type和Assembly类是访问反射所提供的扩展功能的两个核心类Type类,封装了关于类型的元数据,是进行反射的入口Assembly类可以获得程序集的信息,也可以动态的加载程序集,以及在程序集中查找类型信息,并创建该类型的实例获取给定类型的Type引用3种常用方式(1)使用typeof运算符。代码如下:Typet=typeof(string);(2)使用对象GetType()方法。代码如下:strings="grayworm";Typet=s.GetType();(3)通过调用Type类的静态方法GetType()。代码如下:Typet=Type.GetType("System.String");通过程序集名称返回Assembly对象的几种方法1)通过DLL文件名称返回Assembly对象。代码如下:Assemblyass=Assembly.Load("DLL_FileName")2)通过Assembly获取程序集中类。代码如下:Assemblyass=Assembly.LoadFrom("DLL_FileName.dll");3)通过Assembly获取程序集中所有的类。代码如下:Typet=ass.GetType("DLL_FileName.NewClass");//参数必须是类的全名Type[]t=ass.GetTypes();4)通过程序集的名称反射。代码如下:Assemblyass=Assembly.Load("DLL_FileName");Typet=ass.GetType("DLL_FileName.NewClass");Objectobj=Activator.CreateInstance(t,"grayworm","/grayworm");MethodInfomi=t.GetMethod("show");mi.Invoke(obj,null);5)通过DLL文件全名反射其中的所有类型。代码如下:Assemblyassembly=Assembly.LoadFrom("xxx.dll的路径");Type[]aa=a.GetTypes();foreach(Typetinaa){if(t.FullName=="a.b.c"){objecto=Activator.CreateInstance(t);}}9.3案例分析案例要点1)加载指定的程序集Assemblyasm=Assembly.LoadFrom(@"..\run_class.exe");2)获取程序集中的所有类型列Type[]alltype=asm.GetTypes();3)遍历所有类型列,输出类型名,以及类型所包含的方法foreach(Typetempinalltype){Console.WriteLine(temp.Name);MethodInfo[]mi=temp.GetMethods();foreach(MethodInfominmi){//返回方法的返回类型和名称Console.Write(m.ReturnType.Name);Console.Write(""+m.Name+"(");……………….}4)获取方法参数列表并保存在ParameterInfo对象数组中ParameterInfo[]pi=m.GetParameters();5)
输出方法的所有参数的类型和名称for(inti=0;i<pi.Length;i++){Console.Write(pi[i].ParameterType.Name);Console.Write(""+pi[i].Name);if(i+1<pi.Length){Console.Write(",");}}Console.Write(")");获取方法参数列表并保存在ParameterInfo对象数组中ParameterInfo[]pi=m.GetParameters();
输出方法的所有参数的类型和名称for(inti=0;i<pi.Length;i++){Console.Write(pi[i].ParameterType.Name);Console.Write(""+pi[i].Name);if(i+1<pi.Length){Console.Write(",");}}Console.Write(")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年商业地产数字化运营创新实践与客户体验提升报告
- 药品自动进出管理制度
- 药品销售质量管理制度
- 药店状态标识管理制度
- 莲花物业仓库管理制度
- 设备tnpm管理制度
- 设备备件采购管理制度
- 设备实施报废管理制度
- 设备机械安全管理制度
- 设备用电安全管理制度
- 防治脑卒中专业知识讲座
- 平压平模切机安全操作规程、风险告知卡、应急处置
- JJG 646-2006移液器
- GB/T 40167-2021纸和纸板加速老化(100 ℃)
- GB/T 17626.4-2018电磁兼容试验和测量技术电快速瞬变脉冲群抗扰度试验
- GB/T 1094.12-2013电力变压器第12部分:干式电力变压器负载导则
- 活性炭改性及吸附条件研究性实验
- 小学体育教研活动记录(有内容)
- 核级阀门强度计算方法的分析
- 中国古代朝代历史知识大汉王朝科普图文PPT教学课件
- 氯氧铋光催化剂的晶体结构
评论
0/150
提交评论