原帖地址:http://www.cnblogs.com/lazycoding/archive/2013/05/27/3100932.html
反射
当我们需要检查,调用一个程序集的内容的时候,用反射,比如,当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是弱类型,此关键字会让编译器不做编译时的类型检查,只做运行时的检查。
所以上面这行代码可以编译通过,但会产生运行时一场。
实际用处:
最多的就是通过互操作来操作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 |
再来一张图...
本文链接
分享到:
相关推荐
java 反射与动态代理Reflection&DynamicProxy,源码展示
反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。 1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile(程序集路径,不能是...
有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法。我们朗朗上口动态绑定(dynamic binding)、动态链接(dynamic linking)、动态加载(dynamic loading)等。然而“动态”一...
Dynamic Dao 使用反射和注释进行学习。 尝试实现不同的数据库操作。
反射提供了用于在运行时进行高级反射的API,包括类型的动态构造。 用法 import Reflection struct Person { var firstName : String var lastName : String var age : Int } // Reflects the instance ...
dynamic 可在反射、json反序列化时使用、已达到减少代码量的效果。看代码 using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { System.Type t = typeof(Person); var ...
新增了关于如何部署包含内嵌依赖程序集的单一文件的一节,以及比较反射调用、bind/invode、bind/create、delegate/invoke、C#动态类型的一节。 Chapter 24-Runtime Serialization 全新的一章。 Part V – ...
core.reflection - 使用元编程允许 C# 像 C++ 类型的反射。 (不是完全自动的,但有一个简单的界面来描述类型) core.container - 易于使用的自定义容器和模板功能 core.dynamic - 在 C++ 中动态对象的实现 core....
DynamicString和ConstantString 列表 地图 向量 一对 堆 队列 串流 诺言 数学容器 矢量2 矢量3 矢量4 矩阵4 内存管理 系统分配器 DynamicSizeAllocator 固定大小分配器 框架分配器 参考计数 反射反射类型信息...
便携式.NET 4.5,Silverlight 4和5,WinRT,Win Phone 8 用安装: PM> Install-Package Dynamitey 元惊人的功能 基于Easy Fast DLR的反射 使用后期绑定库中的类型的语法 动态- 元组的操纵 内联对象图初
mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:...