c# 反射(一)

转载 2007年09月18日 13:56:00

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

        Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type
类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo
包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
诸如此类,还有FieldInfoEventInfo等等,这些类都包含在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{…}
}

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

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

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

C#综合揭秘——利用泛型与反射更新实体(ADO.NET Entity Framework)

自从ADO.NET Entity Framework面世以来,受到大家的热捧,它封装了大量代码生成的工具,用户只需要建立好实体之间的关系,系统就是会为用户自动成功了Add、Delete、CreateO...

c#反射教程(菜鸟)

  • 2011年04月06日 17:20
  • 16KB
  • 下载

C#中,实体属性与数据库字段的进行反射赋值收藏

在实际开发中,我们经常需要从数据库中读取数据并赋值给实体类的相应属性。在.Text的DataDTOProvider中存在大量这样的代码, 比如: public Role[] GetRoles(I...
  • ty_soft
  • ty_soft
  • 2011年12月21日 10:07
  • 1340

c#反射例子(源码)

  • 2008年10月06日 08:56
  • 65KB
  • 下载

c#应用反射得到自定义属性

  • 2009年05月07日 11:32
  • 45KB
  • 下载

C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

//C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)  using System; using System.Collections.Gene...

C#实现反射实例和软件

  • 2008年11月12日 05:01
  • 137KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# 反射(一)
举报原因:
原因补充:

(最多只允许输入30个字)