反射
当我们需要检查,调用一个程序集的内容的时候,用反射,比如,当VS给智能提示的时候,就应用了反射。
简单用法实例:
var myAssembly = Assembly.LoadFile(@"C:\ClassLibrary1.dll");
var myType = myAssembly.GetType("ClassLibrary1.Class1");
dynamic objMyClass = Activator.CreateInstance(myType);
// 获取类的类型信息
Type parameterType = objMyClass.GetType();// 浏览方法
foreach (MemberInfo objMemberInfo in parameterType.GetMembers())
{Console.WriteLine(objMemberInfo.Name);}// 浏览属性.
foreach (PropertyInfo objPropertyInfo in parameterType.GetProperties())
{Console.WriteLine(objPropertyInfo.Name);}//开始调用
parameterType.InvokeMember("Display",BindingFlags.Public |
BindingFlags.NonPublic | BindingFlags.InvokeMethod |
BindingFlags.Instance,null, objMyClass, null);

实际一点的用处呢:
1.当你也要开发一个类似VS的编辑器的时候,要提供智能提示就需要反射
2.当创建单元测试框架的时候,为了测试需要动态调用方法和属性的时候
3.有时候我们想把类型的属性,方法等全部导出的时候
动态dynamic
编程语言分为强/弱类型,dynamic是弱类型,此关键字会让编译器不做编译时的类型检查,只做运行时的检查。
dynamic x = "c#";
x++;

所以上面这行代码可以编译通过,但会产生运行时一场。
实际用处:
最多的就是通过互操作来操作Office组件的时候了
没有dynamic的时候
/ Before the introduction of dynamic.
Application excelApplication = new  Application();
((Excel.Range)excelApp.Cells[1, 1]).Value2 = "Name";
Excel.Range range2008 = (Excel.Range)excelApp.Cells[1, 1];

有了dynamic之后世界就不一样了
dynamic excelApp = new Application();
excelApp.Cells[1, 1].Value = "Name";
Excel.Range range2010 = excelApp.Cells[1, 1];

两者的区别和联系呢
1.当我们想要在运行时操作一个对象的时候,就会用到这两个
2.反射可以用来检测对象的元数据,也能在运行时调用对象的方法和属性
3.dynamic是.net 4.0新出的关键字,知道方法被调用的时候,编译器才会晓得这个方法到底有还是没有。
4.dynamic内部是使用反射来实现的,它缓存了方法调用来提高性能
5.反射可以调用公有和私有成员,而dynamic智能调用用公有成员
6.dynamic是实例相关的,无法访问静态成员,这种情况下使用反射吧。
  Reflection Dynamic
Inspect (meta-data)  Yes  No 
Invoke public members Yes Yes
Invoke private members Yes No
Caching No Yes
Static class   Yes  No 

再来一张图...

原文:http://www.codeproject.com/Articles/593881/What-is-the-difference-between?utm_source=feedly

转载于:https://www.cnblogs.com/lazycoding/archive/2013/05/27/3100932.html

[译]反射(Reflection)和动态(dynamic)相关推荐

  1. C#反射(Reflection)详解

    1. 什么是反射 2. 命名空间与装配件的关系 3. 运行期得到类型信息有什么用 4. 如何使用反射获取类型 5. 如何根据类型来动态创建对象 6. 如何获取方法以及动态调用方法 7. 动态创建委托 ...

  2. Java基础--反射Reflection

    Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...

  3. 反射(reflection)基础

    反射(reflection) 1. 一个需求引出反射 1.1 请看下面的问题 根据配置文件 re.properties 指定信息,创建Cat对象并调用方法hi 我们用之前的方式处理就是: 先创建一个C ...

  4. JavaSE——第23章 反射reflection

    JavaSE--第23章 反射reflection(老师:韩顺平) 文章目录 JavaSE--第23章 反射reflection(老师:韩顺平) 23.2 反射机制 23.2.1 Java refle ...

  5. 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...

    方法1:通过get()方法获取属性值 package com.sxd.test.controller;public class FirstCa{private Integer num;private ...

  6. CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction)...

    CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction) 开始 如图所示,本文围绕GLSL里的sam ...

  7. 深入理解java注解,java的4个元注解,注解三要素——定义、使用及读取执行,深入了解注解的底层本质,通过反射自动、动态获取注解所有属性以及属性值

    1. 注解的定义 注解也是一种引用类型,编译后会生成 .class 字节码文件,作用就是为程序进行标识,不同注解能实现不同功能. 2. 注解的使用 3. 注解的读取执行 3.1 得不到注解信息,得到的 ...

  8. JavaME程序 Run Anywhere-- 利用反射机制来动态加载声

    让JavaME程序 Run Anywhere-- 利用反射机制来动态加载声 时间:2008-02-23 09:26来源:互联网 让JavaME程序 Run Anywhere -- 利用反射机制来动态加 ...

  9. Java 反射机制和动态代理是基于什么原理,了解过吗?

    工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1."知其然不知其所以然". 做了多年技术,开发了 ...

  10. 使用反射生成 JDK 动态代理

    反射 反射赋予了我们在运行时分析类和执行类中方法的能力. 通过反射,可以获取任意一个类的所有属性和方法,还可以调用这些方法和属性. 使用反射生成 JDK 动态代理 JDK 动态代理只能为接口创建动态代 ...

最新文章

  1. java export命令_Linux 命令详解(一)export 命令
  2. NodeJS——模块全局安装路径配置以及关于supervisor的问题解释
  3. 【转】自旋锁及其衍生锁
  4. javafx由浅到深的 认识(一)
  5. aix 超过一天的文件_Aix 6.1下 /dev/null 21 文件过大导致根目录爆满
  6. 碰撞与鲜血:人类与自动驾驶的坎坷摩擦
  7. java中map的使用和排序使用
  8. 解决Visual Studio 2022 python 中文乱码问题
  9. 微信公众服务号申请、认证(开通支付)-微信开发图文教程
  10. 英国某电商在线零售客户细分_Kaggle项目
  11. css 实现单行、多行文本显示
  12. 计算机辅助设计的英语缩写是什么,计算机辅助设计的英文缩写是什么
  13. 删除计算机的用户凭据,windows凭据怎么填写? 电脑添加删除Windows凭据的技巧
  14. 使用Xgboost自带的读取格式DMatrix()
  15. postman+newman
  16. 读洛克的《政府论》下篇
  17. 七星网购血本打造立体视频商城
  18. JEECG微云快速开发平台相关资源下载
  19. 1015 - 计算几何之多边形的面积 - Build Your Home(POJ 3907)
  20. 大学生期末课程设计之Web前端流浪猫狗网站设计

热门文章

  1. C语言默认参数值的实现
  2. 初中物理凸透镜成像动态图_人教版初中物理八年级上册 平面镜成像 公开课优质课课件教案视频...
  3. python电话通知_教你如何用Python向手机发送通知
  4. python3.8使用pyttsx3报错_使用pyttsx3实现python语音播报
  5. Futter基础第2篇: 实现文本、容器【Text、Container】
  6. Android ListView + ArrayAdapter、SimpleAdapter、BaseAdapter实现列表
  7. nginx详解反向代理,负载均衡,LNMP架构上线动态网站
  8. Java基础小常识-final,抽象类,接口-(11)
  9. C#与Javascript变量、函数之间的相互调用
  10. LeetCode()Minimum Window Substring 超时,但觉得很清晰。