《ASP.NET4.0程序设计案例教程》课件-第9章 -反射技术_第1页
《ASP.NET4.0程序设计案例教程》课件-第9章 -反射技术_第2页
《ASP.NET4.0程序设计案例教程》课件-第9章 -反射技术_第3页
《ASP.NET4.0程序设计案例教程》课件-第9章 -反射技术_第4页
《ASP.NET4.0程序设计案例教程》课件-第9章 -反射技术_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论