`
bollaxu
  • 浏览: 217012 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C# Reflection 反射

    博客分类:
  • C#
 
阅读更多

Reflection反射有四种表现方式:

1.查看元数据metadata(通过attributes特性表示的),用于显示等

2.类型的发现(类型、类型中定义的属性、方法、事件等)

3.推迟绑定对象,可以动态实例化对象并调用方法

4.动态创建新的类型

 

类型发现的实例:

 

//读取库
Assembly a = Assembly.Load("Mscorlib.dll");
//读取库的所有类型,存入数组
Type[] types = a.GetTypes();
//读取一个类
Type theType = Type.GetType("System.Reflection.Assembly");
//读取类的所有成员,包含方法、属性、事件等等
MemberInfo[] mbrInfoArray = theType.GetMembers();
//只获取成员方法
MemberInfo[] mbrInfoArray = theType.GetMethods();
//根据条件查询所有类型的成员,比如只获取名字以Get开头的方法
MemberInfo[] mbrInfoArray = theType.FindMembers(MemberTypes.Method, BindingFlags.Default, Type.FilterName, "Get*");

 

动态读取类、生成实例、及调用方法的例子:

//读取库/获取类型,创建对象实例
Type theMathType = Type.GetType("CustomMath");
Object theObj = Activator.CreateInstance(theMathType);
//创建参数类型
Type[] paramTypes = new Type[1];
paramTypes[0]= Type.GetType("System.Double");
//获取类型中的方法,这里需要对类型中方法有一定认识,不然就不知道调用哪个方法,导致程序不可控
MethodInfo CosineInfo = theMathType.GetMethod("Cos", paramTypes);
//生成参数
Object[] parameters = new Object[1];
parameters[0] = 45;
//调用实例方法
Object returnVal = CosineInfo.Invoke(theObj, parameters);
 

动态创建新的类型(reflection emit反射发出),一般用的比较少。

 

 

分享到:
评论

相关推荐

    C#反射(Reflection)详解

    C#反射(Reflection)详解 什么是反射 命名空间和装配体的关系

    C#反射(Reflection)的应用

    反射(Reflection)是C#里很重要的一个特性,源码是我写的一篇关于反射的文章的示例,有详细的解释,是学习反射的好实例。

    c# 反射(Reflection)例子

    c# 反射(Reflection)例子

    C# 反射例ReflectionExample

    C# 反射例ReflectionExample C# 反射例ReflectionExample C# 反射例ReflectionExample

    关于C#的反射机制详解

    C#反射 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定...

    详解C# 利用反射根据类名创建类的实例对象

    反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。 1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile(程序集路径,不能是...

    C# 反射 Reflection

    查看dll信息 命名空间 类 方法 方法参数 返回 参数 等等

    通过C++来实现类似JAVA和C#的反射原理例子程序

    用C++实现类似JAVA和C#的反射原理的例子程序

    C# 反射技术应用

    C# 反射技术应用  反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个...

    C# 反射实例代码 接口方式动态加载dll方式Reflection

    C# 反射实例代码 接口方式动态加载dllReflectionC# 反射实例代码 接口方式动态加载dllReflection

    详解C# 反射(Reflection)

    主要介绍了C# 反射(Reflection)的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下

    Sev.Reflection.rar_C# 反射 封装_反射_反射应用封装

    C#反射其它DLL的封装应用,支持方法、参数、对象的调用。

    C#反射总结

    C#反射总结 Reflection,中文翻译为反射。这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成

    c# 反射实例

    //c# 反射实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main( string...

    VC模拟C#反射中的动态创建功能

    使用C++模拟C#中的“反射”的动态创建功能,实现对象的动态加载.在自定义类中使用DECLARE_REFLECTION声明反射;使用IMPLEMENT_REFLECTION实现反射。 程序运行过程可以使用Assembly::CreateInstance动态创建对象(可以...

    C#的反射

    老师上课积累来的,不怎么看懂,回去仔细看红皮书啦

    01:详解C#中的反射.pdf

    ●使用 C# typeof 运算符。 Type t = typeof(string); ●使用对象GetType()方法。 string s = "grayworm"; Type t = s.GetType(); ●还可以调用Type类的静态方法GetType()。 Type t = Type.GetType("System....

    C#反射机制.doc

    System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码 System.Reflection.Assembly System.Reflection.MemberInfo System.Reflection.EventInfo System.Reflection.FieldInfo System....

    C# 反射(Reflection)的用处分析

    反射(Reflection)是C#里很重要的一个特性,其它语言也有这个特性,比如JAVA。反射这个特性是很实用的,如果使用过struts, hibernate, spring等等这些框架的话,便会知道反射这个特性是多么的强大了。在我接触过的...

Global site tag (gtag.js) - Google Analytics