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

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

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

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

转载于:https://www.cnblogs.com/bingbinggui/p/4573728.html

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

  1. 第二节认识计算机教案,第二章 第二节 局域网的构建 教学设计_博客

    <第二章 第二节 局域网的构建 教学设计_博客>由会员分享,可在线阅读,更多相关<第二章 第二节 局域网的构建 教学设计_博客(3页珍藏版)>请在装配图网上搜索. 1.第二章 ...

  2. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序

    面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...

  3. 第二部分:开发简要指南-第六章 使用Fragments构建动态UI

    第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用Fragment类 ...

  4. JPA 2.0 中的动态类型安全查询(如何通过 Criteria API 构建动态查询并减少运行时失败)...

    简介:  如果编译器能够对查询执行语法正确性检查,那么对于 Java 对象而言该查询就是类型安全的.Java™Persistence API (JPA) 的 2.0 版本引入了 Criteria AP ...

  5. 《Linux From Scratch》第二部分:准备构建 第五章:构建临时文件系统- 5.2 工具链技术备注...

    本节解释总体构建方法之中的某些基本原理和技术细节.并不需要立即理解本节中的所有问题.在进行实际构建的过程中,绝大部分的信息将会变得愈加清晰.在该过程中可随时查阅本小节的内容. 第五章的总体目标是生成一 ...

  6. Atitit保证架构超前性 前瞻性 目录 第一章 简单抽象原则 道和术的区别 1 第一节 原则 kiss 1 第二节 提升到层次哲学层次 1 第三节 命名也要通用抽象 隐藏细节 1 第二章 通用性原

    Atitit保证架构超前性 前瞻性 目录 第一章 简单抽象原则 道和术的区别 第一节 原则 kiss 第二节 提升到层次哲学层次 第三节 命名也要通用抽象 隐藏细节 第二章 通用性原则  扩展性 第一 ...

  7. java类加载机制、反射、动态代理详解

    类的加载.连接和初始化(系统可能在第一次使用某个类时加载该类, 也可能采用预加载机制来加载某个类)动态代理实现 1.JVM和类 当调用 java 命令运行某个 Java 程序时, 该命令将会启动一个 ...

  8. java centos 缩略图_使用 Nginx 的 image_filter 模块来构建动态缩略图服务器

    原标题:使用 Nginx 的 image_filter 模块来构建动态缩略图服务器 在以前我们实现缩略图机制通常是在当用户上传一张图片后,后端程序会固定将图片生成前端页面需要的不同大小缩略图.不管前端 ...

  9. springboot集成clickhouse之策略模式+线程池+反射实现动态批量操作

    线程池+策略模式+反射实现动态批量操作clickhouse 目录 前言 安装ck 整体设计 策略模式设计 线程池管理ck 码上有戏 反射核心 测试 简单说明 源码地址 目录 前言 之前实际项目中遇到过 ...

最新文章

  1. 在linux命令行 下学习编写java
  2. linux系统下创建symlink(@)即文件软链接(快捷方式)的命令
  3. Git复习(八)之快速理解Git结构
  4. android添加动画文件,Android开发之图形图像与动画(五)LayoutAnimationController详解
  5. eclipse开发cocos2dx 3.2环境搭建之二: cocos2dx 3.2安装及测试运行 (An internal error occurred during: “C/C++ Indexe)
  6. linux用于开发qt java_Linux下Qt程序的打包发布
  7. python string length_自学Python:第四篇字符串
  8. 关于js拷贝对象的问题
  9. 【CSS 基础教程】
  10. C# 插入、删除Excel分页符
  11. 2021年全国省市区街道代码自动同步(包含解决方案)
  12. 谢谢版主整理的好材料,,妈妈再也不用担心的我的unity
  13. 什么是负载?如何查看服务器的机器负载情况?
  14. Compose实战-以MVI的方式写Compose
  15. SharePoint加K2,将Portal系统与BPM系统完美整合!
  16. 单元格函数:count、countA、countBlank
  17. 23hh小说网——爬虫1.0python
  18. 经典进程同步与互斥问题
  19. 中国移动java面试_中国移动软件工程师面试经验
  20. 末代帝王微软:戴着PC枷锁跳“移动Style”

热门文章

  1. functools模块
  2. python笔记06_进程vs线程
  3. 当前主流量化平台整理201705版
  4. 报表自动化就是连接数据库?错,它打开了数据仓库的大门
  5. c语言如何写地图,自己用C语言写的扫雷地图
  6. FFmpeg安卓平台编译
  7. linux telnet 127.0.0.1 不通,Linux 出现telnet: 127.0.0.1: Connection refused错误解决办法
  8. (第三章)查看数据库
  9. 三维数组地址计算_C语言进阶之路:数据类型 - 多维数组与指针!我的心中只有学习!...
  10. 数据结构 5-3-1 二叉树四种顺序遍历递归实现