1、什么是反射
    Reflection,中文翻译为反射。
    这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:

Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。

2、命名空间与装配件的关系
    很多人对这个概念可能还是很不清晰,对于合格的.Net程序员,有必要对这点进行澄清。
    命名空间类似与Java的包,但又不完全等同,因为Java的包必须按照目录结构来放置,命名空间则不需要。

装配件是.Net应用程序执行的最小单位,编译出来的.dll、.exe都是装配件。

装配件和命名空间的关系不是一一对应,也不互相包含,一个装配件里面可以有多个命名空间,一个命名空间也可以在多个装配件中存在,这样说可能有点模糊,举个例子:
装配件A:
namespace N1
{
   public class AC1 {…}
   public class AC2 {…}
}
namespace N2
{
   public class AC3 {…}
   public class AC4{…}
}
装配件B:
namespace N1
{
   public class BC1 {…}
   public class BC2 {…}
}
namespace N2
{
   public class BC3 {…}
   public class BC4{…}
}

这两个装配件中都有N1和N2两个命名空间,而且各声明了两个类,这样是完全可以的,然后我们在一个应用程序中引用装配件A,那么在这个应用程序中,我们能看到N1下面的类为AC1和AC2,N2下面的类为AC3和AC4。
    接着我们去掉对A的引用,加上对B的引用,那么我们在这个应用程序下能看到的N1下面的类变成了BC1和BC2,N2下面也一样。
    如果我们同时引用这两个装配件,那么N1下面我们就能看到四个类:AC1、AC2、BC1和BC2。

到这里,我们可以清楚一个概念了,命名空间只是说明一个类型是那个族的,比如有人是汉族、有人是回族;而装配件表明一个类型住在哪里,比如有人住在北京、有人住在上海;那么北京有汉族人,也有回族人,上海有汉族人,也有回族人,这是不矛盾的。

上面我们说了,装配件是一个类型居住的地方,那么在一个程序中要使用一个类,就必须告诉编译器这个类住在哪儿,编译器才能找到它,也就是说必须引用该装配件。
    那么如果在编写程序的时候,也许不确定这个类在哪里,仅仅只是知道它的名称,就不能使用了吗?答案是可以,这就是反射了,就是在程序运行的时候提供该类型的地址,而去找到它。
有兴趣的话,接着往下看吧。

3、运行期得到类型信息有什么用
    有人也许疑问,既然在开发时就能够写好代码,干嘛还放到运行期去做,不光繁琐,而且效率也受影响。
这就是个见仁见智的问题了,就跟早绑定和晚绑定一样,应用到不同的场合。有的人反对晚绑定,理由是损耗效率,但是很多人在享受虚函数带来的好处的时侯还没有意识到他已经用上了晚绑定。这个问题说开去,不是三言两语能讲清楚的,所以就点到为止了。
    我的看法是,晚绑定能够带来很多设计上的便利,合适的使用能够大大提高程序的复用性和灵活性,但是任何东西都有两面性,使用的时侯,需要再三衡量。

接着说,运行期得到类型信息

转载于:https://www.cnblogs.com/wangshijie/archive/2009/05/13/1455780.html

Net中的反射使用入门相关推荐

  1. 大白话说Java反射:入门、使用、原理,BAT 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 文章 ...

  2. JAVA中的isMirror函数_Swift中的反射Mirror

    Swift中的反射Mirror [TOC] 前言 Mirror是Swift中的反射机制,对于C#和Java开发人员来说,应该很熟悉反射这个概念.反射就是可以动态的获取类型以及成员信息,同时也可以在运行 ...

  3. c#中的反射的高级语法_Kubernetes第3部分中的seccomp新语法以及一些高级主题

    c#中的反射的高级语法 On this part I want to cover a few isolated points that hopefully together would give a ...

  4. Java中的模块(Module)入门介绍

    Java中的模块(Module)入门介绍 在Java 9版本中Java 语言引入了一个非常重要的概念:模块(module).module引入了Java代码分组的另一个级别.每个module都包含许多子 ...

  5. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

  6. 详解Java反射机制------入门篇

    一.什么叫Java反射机制? Java中的反射机制是指在运行状态中,对于任意一个类,能够动态获取这个类中的属性和方法:对于任意一个对象,都能够任意调用它的属性和方法.这种动态获取类的信息以及动态调用对 ...

  7. 来看看如何在 C# 中使用反射

    C# 中的 反射 常用于在程序的运行时获取 类型 的元数据,可获取的信息包括已加载到进程中的 程序集 和 类型 信息,它和 C++ 中的 RTTI(Runtime Type Information) ...

  8. C#温故而知新学习系列之.NET框架高级特性—概述.NET框架中的反射(一)

    阅读目录 一:什么是元数据? 二:概述.NET框架中的反射 一:什么是元数据? 元数据,就是描述数据的数据,它存储在PE文件中,PE文件由IL Code和元数据组成,元数据为.NET提供了丰富的自我描 ...

  9. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

最新文章

  1. Oracle Clustered Table
  2. 报告软件测试错误的规范
  3. 基于GCCAVR的TLC2543读写程序----模拟SPI方式实现
  4. cacti 被监控机器snmp 配置
  5. nvprof 使用记录; 以及使用 nvprof 查看tensorflow-gpu 核函数运行记录
  6. 如何使用Service的Context弹出Dialog对话框,即全局性对话框
  7. mysql5.7.13编译安装_编译安装MySQL-5.7.13
  8. 微软服务器探针产品,服务器云探针
  9. 全国人口年龄结构及抚养比(1987-2019年)
  10. ArcGIS for Android 100.3的学习与应用(三) 实现地图添加自定义指北针
  11. Office - Excel如何查询重复值数量
  12. redis中字符串(String)类型常见命令操作 (附有示例)
  13. อยากจะร่ำรวยเล่น แทงบอลออนไลน์
  14. 2023 年openEuler 社区技术委员会增选,新增2位委员
  15. 工作日,我们又团建了!
  16. 使用Java统计英文文章的单词频率。
  17. 微信无法下载文件如何做提示跳转到浏览器
  18. addEventListener()使用方法
  19. 关于解决Carsim2016找不Liscens问题的原生BIA法
  20. redis命令配置别名步骤

热门文章

  1. 怎么查询linux中的组密码,linux查看用户组中的用户
  2. linux web 共享文件夹,KodExplorer 3.2外链支持,文件夹共享,Web在线文件管理
  3. mariadb 没有mysql表_数据未插入mySQL表(MariaDB)
  4. mac安装软件管理Android手机,Mac如何管理Android手机:这方式很得体
  5. java sync和async区别_GCD中串行、并行与async、sync的区别
  6. TypeError: rectangle() got an unexpected keyword argument ‘width‘报错:
  7. 【NLP-词向量】从模型结构到损失函数详解word2vec
  8. 【AI-1000问】训练为什么要分测试集和验证集?
  9. 在vc2005中使用MoveWindow()调整控件大小,不能及时刷新,在vc6中则可以
  10. 微信小程序适配iPhone X