第二节:使用反射构建动态可扩展应用程序

众所周知,元数据时是用一系列表来存储的。生成一个程序集或模块时,编译器会创建一个类型定义表,一个字段定义表,一个方法定义表以及其他表。利用System.Reflection命名空间中包含的一些类型,可以写代码来反射这些元数据。实际上,这个命名空间中的类型为程序集或模块中包含的元数据创建了一个对象模型。

利用这个对象模型中的类型,可轻松枚举一个类型定义元数据表中的所有类型。然后,针对每个类型,都可以获取它的基类型,它实现的一些接口以及与类型关联的一些标志。利用System.Reflection命名空间中的其他类型,还可解析对应的元数据表来查询类型的字段,方法,属性和事件,还可发现应用于任何元数据实体的任何定制attribute。甚至有一些类型允许判断引用的程序集;还有一些方法,他们返回一个方法的IL字节流。利用所有这些信息,很容易构建一个和ILDASM.EXE非常相似的工具。

事实上,只要极少数应用程序才需要使用反射类型。反射一般由某些类库使用,他们需要理解类型的定义才能提供丰富的功能。例如,FCL的序列化机制就是利用反射来判断一个类型定义了哪些字段。然后,序列化格式器可以获取这些字段的值,并把他们写入一个字节流,以便通过Internet传送,保存到文件或者复制到剪切板。类似的,在设计期间,Microsoft Visual Studio 设计器在Web窗体或Window窗体上放置控件时,也利用反射来决定向开发人员显示的属性。

在运行时,应用程序需要从一个特定的程序集中加载一个特定的类型,以执行特定的任务时,也要使用反射。例如,应用程序可要求用户提供一个程序集和一个类型的名称。然后,应用程序可以显示加载程序集,构造一个类型的实例,再调用类型中定义的方法。这种用法在概念上类似于调用Win 32 LoadLibrary和GetProcAddress函数,这种方式绑定到类型并调用方法通常称为晚期绑定。

时间: 2024-10-28 20:32:29

第二节:使用反射构建动态可扩展应用程序的相关文章

【软件构造】第二章第二节 软件构造的过程、系统和工具

第二章第二节 软件构造的过程.系统和工具 Outline 广义的软件构造过程 编程 静态代码分析 动态代码分析 调试与测试 重构 狭义的软件构造过程 构造系统:经典BUILD场景 构造系统的组件 构造过程和构造描述 Java编译工具 子目标和结构变体 构造工具 Notes ## 广义的软件构造过程 [编程(Coding)] 开发语言:如Java.C.Python 使用IDE(集成开发工具)的优势(组成) 方便编写代码和管理文件(有代码编辑器,代码重构工具.文件和库(Library)管理工具) 能

Java开发人员必懂的基础——反射与动态代理

Java的反射与动态代理是java体系结构中较为底层的知识,初学者可能觉得没有太大的用处,但他们确实著名Spring框架IOC和AOP所用的最重要的内容.当我们需要开发更基础,更广泛的的代码时,就会用到这学知识了. 在此之前,我们先来了解一下java的类加载机制 JVM与类加载机制: /* * 1.JVM:当调用java命令来运行某个java程序时,该命令会启动一个java虚拟机进程,同一个JVM中的所有线程,所有变量都处于同一个进程里,都使用该JVM的内存区 * 2.JVM:运行下面两个测试类

【软件构造】第六章第二节 可维护的设计模式

第六章第二节 可维护的设计模式 Outline 创造性模式:Creational patterns 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 结构化模式:Structural patterns 桥接模式(Bridge Pattern) 代理模式(Proxy Pattern) 组合模式(Composite Pattern) 行为化模式:Behavioral patterns 中介者模式

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一、 除夕诗词概述 二、元日诗词概述 三、 元宵诗词概述 第二节:春节古诗词拾萃

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一. 除夕诗词概述 二.元日诗词概述 三. 元宵诗词概述 第二节:春节古诗词拾萃 一.腊祭诗词 二.祭灶诗词 三.除夕诗词 四.元旦诗词 五.人日诗词 六.元宵诗词 第一节:春节古诗词概述 中国的春节,作为除旧迎新的节日,时间相当长,从年前的腊月二十三,天空中就似乎弥漫了节日的气息.这种节日的气氛,在保持传统风俗较好的地方,甚至会持续到二月二龙抬头的时候,但欢度春节的高潮,应该说是自除夕始一直到上元之夜.因此,历代歌咏和反

java反射与动态代理

Java反射与动态代理 Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制.java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的耦合性.这些都是java的基础知识,要想成为一名合格的程序猿,必须掌握! Java反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为

第二节 什么是接口

什么是接口 主讲教师:王少华     QQ群号:483773664 学习目标 掌握接口的定义与使用 理解接口与抽象类的区别 一.什么是接口 现实生活中,我们经常听到接口这个词,比如USB接口,那它是什么意思呢?我们拿USB接口为例,不管那个厂商生产的USB存储器,我们都可以通过USB接口让电脑识别出来,这是为什么呢?这是因为这些生产厂商遵循了一套相同的标准,并按照这个标准来生成USB设备. 在软件中,接口同样是一种规范和标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现.因此,

C# 通过反射来动态创建泛型类型

C# 通过反射来动态创建泛型类型与创建普通类型的区别在于:泛型参数的处理 创建泛型类型存在三种情况: 第一种:知道泛型类型,但需要动态指定泛型参数: 第二种:知道泛型参数,但需要动态创建指定参数的泛型类型: 第三种:泛型类型与泛型参数均都不直接指定,需要动态创建指定参数的泛型类型: 具体的方法说明详见文俊IT社区网(www.zuowenjun.cn),文章地址如下: http://www.zuowenjun.cn/post/2015/07/22/174.html

黑马程序员————java中类的加载、反射、动态代理、枚举

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 类的加载.反射.动态代理.枚举 一.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.加载: 就是指将class文件读入内存,并为之创建一个Class对象 ★★

使用Expression Tree构建动态LINQ查询

这篇文章介绍一个有意思的话题,也是经常被人问到的:如何构建动态LINQ查询?所谓动态,主要的意思在于查询的条件可以随机组合,动态添加,而不是固定的写法.这个在很多系统开发过程中是非常有用的. 我这里给的一个解决方案是采用Expression Tree来构建. 其实这个技术很早就有,在.NET Framework 3.5开始引入.之前也有不少同学写过很多不错的理论性文章.我自己当年学习这个,觉得最好的几篇文章是由"装配脑袋"同学写的.[有时间请仔细阅读这些入门指南,做点练习基本就能理解]