随笔分类 - Reflection反射

摘要:1.NET组件的层次: 2.获取元数据,以下3个方法分别获取Type,Event,Properties的元数据: 对于Type,通过TypeDescriptor静态类,获取其默认事件,默认属性,以及该类型所带的所有Attribute(通过枚举取得) 可以通过TypeDescriptor.GetEvents静态方法获取事件集合EventDescriptorCollection,... 阅读全文
posted @ 2008-09-22 16:49 chinaifne 阅读 (196) | 评论 (0) 编辑
摘要:1.Attribute,属性(特性),又名元数据,自定义属性。编译期会解释属性,并将对应的标志插入到IL中。 AOP:面向方面的编程,以声明性的方式控制属性。 .NET已有的属性类: 1)Serializable: 仅可用于Class/Struct/Enum/Delegate 2)NotSerialized:仅用于字段 3)AssemblyVersion:仅用于程... 阅读全文
posted @ 2008-09-22 16:48 chinaifne 阅读 (184) | 评论 (0) 编辑
摘要:第一部分 动态程序集加载 1.创建程序集引用:分2种 全面引用:以引用程序集名称,版本,文化以及公钥标记的方式,进行加载——首选,避免DLL Hell。静态引用的程序总是全部引用 部分引用:只使用程序集名称,而忽略其他所有属性,进行加载。 .Net如何找到要加载的DLL: 首先,运行时要分析应用程序配置文件,包括以下3个级别: ... 阅读全文
posted @ 2008-09-22 16:47 chinaifne 阅读 (162) | 评论 (0) 编辑
摘要:本章是上一章的继续,再获取到对象类型后,接下来做的事情。 第一部分 动态调用成员——调用方法,检索或更改属性,以及字段 方法1:利用Info类调用类成员 1.用MethodInfo类调用方法: object[] Invoke(object obj, Object[] parameters) 其中,第1个参数obj,是对象的实例(静... 阅读全文
posted @ 2008-09-22 16:47 chinaifne 阅读 (262) | 评论 (0) 编辑
摘要:第一部分:程序集(System.Reflection.Assembly) 1.获取Assembly对象 方法1:调用Assembly的以下4个静态方法Get...()之一: GetAssembly(Type t) GetCallingAssembly() ——返回调用当前方法的方法所在的程序集 GetExecutingAssembly() ... 阅读全文
posted @ 2008-09-22 16:46 chinaifne 阅读 (250) | 评论 (0) 编辑
摘要:1.反射的定义: 反射是在运行时动态分析,操纵和创建对象的机制。——3个功能,依次在以下章节分析。 反射要访问存储于.NET程序集中的元数据,以发现原始代码方面的信息。 2.反射的后期绑定区别于C#中的后期绑定。 C#中采用override方法进行后期绑定——编译期间确定使用那个方法。 反射没有这个限制,直到运行期间才会确定。反射还可以绑定程序集和类型,根据元数... 阅读全文
posted @ 2008-09-22 16:45 chinaifne 阅读 (196) | 评论 (0) 编辑
摘要:反射是.net中的高级功能之一,利用反射可以实现许多以前看来匪夷所思的功能,下面是我看了《Programming C#》(O'Reilly)之后对于反射的一点实践,本想直接做个应用程序来说明问题,但苦于工作繁忙并考虑到以简单为主,故先对反射发送(reflection emit)的使用做一些介绍。文章最后再给出一个实例。 下面的程序在运行时生成了一个Test.cs文件,并调用csc编译成T... 阅读全文
posted @ 2008-09-22 16:40 chinaifne 阅读 (5351) | 评论 (0) 编辑
摘要:反射的作用: 1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型 2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。 3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。 1 需要反射的DLL using System; namespace Webtest { public class ... 阅读全文
posted @ 2008-09-22 16:38 chinaifne 阅读 (363) | 评论 (0) 编辑
摘要:写这个想法:就是 如果想比较一个enum类中的枚举项是否相同的话。 可以用下面的这个语句: BindingFlags selectedBindingFlags = (BindingFlags)Enum.Parse(typeof(BindingFlags), this.comboBox1.SelectedValue.ToString(), true); * public enum Bin... 阅读全文
posted @ 2008-09-22 16:37 chinaifne 阅读 (566) | 评论 (0) 编辑
摘要:动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它。可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以做什么。在进行更有趣的话题之前,我们先看下如何动态地创建一个对象。 我们新建一个Console控制台项目,叫做Reflection4(因为本文是Part4,你也可以起别的名字)。然后,添加一个示范类... 阅读全文
posted @ 2008-09-22 16:35 chinaifne 阅读 (3250) | 评论 (0) 编辑
摘要:反射特性(Attribute) 可能很多人还不了解特性,所以我们先了解一下什么是特性。想想看如果有一个消息系统,它存在这样一个方法,用来将一则短消息发送给某人: // title: 标题;author:作者;content:内容;receiverId:接受者Id public bool SendMsg(string title, string author, string content, in... 阅读全文
posted @ 2008-09-22 16:33 chinaifne 阅读 (103) | 评论 (0) 编辑
摘要:反射概述 和Type类 1.反射的作用 简单来说,反射提供这样几个能力:1、查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata);2、迟绑定(Late-Binding)方法和属性。3、动态创建类型实例(并可以动态调用所创建的实例的方法、字段、属性)。序章中,我们所采用的那个例子,只是反射的一个用途:查看类型成员信息。接下来的几个章节,我们将依次介绍反射所提供的其他能力。 2.获... 阅读全文
posted @ 2008-09-22 16:31 chinaifne 阅读 (101) | 评论 (0) 编辑
摘要:引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助。 反射是一个庞大的话题,牵扯到的知识点也很多,包括程序集、自定义特性、泛型等,想要完全掌握它非常不易。本文仅仅对反射做一个概要介绍,关于它更精深的内容,需要在实践中逐渐掌握。本文将分为下面几个部分介绍.Net中的反射: 序章... 阅读全文
posted @ 2008-09-22 16:28 chinaifne 阅读 (133) | 评论 (1) 编辑
摘要:1.何谓反射? 反射就是在运行的时候发现对象的相关信息。根据这些信息可以动态的执行对象的方法以及获取对象的属性所储存的值。使用.NET Framework编写的代码是自动反射的,或者说是自我描述的。之所以可以反射,是通过编译后产生的元数据来做到的。因此,你可以在你的程序中使用反射来查找托管代码中的类型(包括类的名称,方法以及参数)和与其相关的信息这其中包括执行被发现的代码。你也可以在程序运行的... 阅读全文
posted @ 2008-09-22 16:23 chinaifne 阅读 (100) | 评论 (0) 编辑
摘要:【开篇】 这篇帖子真的憋了好久.无处下笔啊! 搜了搜园子,已经有棵这方面的好白菜了!链接如下 http://www.cnblogs.com/whxleem/category/4641.html 以此为资料,学习了一下,但心有不甘,要不前两篇许下的承诺就没法实现了!于是有了这篇帖子. 【正文】 ①什么是反射? 反射提供了封装程序集、模块和类型的对象。 您可以使用反射动态地创建类型的实例(见④ )... 阅读全文
posted @ 2008-09-22 16:17 chinaifne 阅读 (140) | 评论 (0) 编辑
摘要:您清晰的组件化目标是否因在库间共享过多类型信息而落空?或许您需要高效的强类型化数据存储,但如果每次对象模型发展后都需要更新您的数据库架构,那会耗费很大成本,所以您更愿意在运行时推断出其类型架构吗?您需要交付能接受任意用户对象的组件,并以某种智能化的方式处理它们吗?您希望库的调方者能以编程方式向您说明它们的类型吗?如果您发现自己在苦苦维持强类型化数据结构的同时,又冀望于最大化运行时灵活性,... 阅读全文
posted @ 2008-09-22 16:15 chinaifne 阅读 (126) | 评论 (0) 编辑