分享

反射(转)

 牛人的尾巴 2015-10-28

反射(转)- 1

(2010-05-05 15:41:01)
标签:

杂谈

分类: C#

转自:http://www.cnblogs.com/axzhz/archive/2006/11/01/546493.html

C#反射Reflection学习随笔(完结篇)_AX

【开篇】
这篇帖子真的憋了好久.无处下笔啊!
搜了搜园子,已经有棵这方面的好白菜了!链接如下
http://www.cnblogs.com/whxleem/category/4641.html

以此为资料,学习了一下,但心有不甘,要不前两篇许下的承诺就没法实现了!于是有了这篇帖子.

【正文】
①什么是反射?
反射提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例(见④ ),将类型绑定到现有对象(这个不会),或从现有对象中获取类型(见②③ )。然后,可以调用类型的方法或访问其字段和属性。
最最简单的反射:如下
 1反射(转)- <wbr>1using System;
 2反射(转)- <wbr>1using System.Reflection;
 3反射(转)- <wbr>1namespace TestReflection
 4反射(转)- <wbr>1{
 5反射(转)- <wbr>1    class Program
 6反射(转)- <wbr>1    {
 7反射(转)- <wbr>1        static void Main(string[] args)
 8反射(转)- <wbr>1        {
 9反射(转)- <wbr>1            //创建两个对象【object和Objetct好像没有区别啊??连提示都一样!】
10反射(转)- <wbr>1            object new AX();
11反射(转)- <wbr>1            Object new AXzhz();
12反射(转)- <wbr>1            //获取对象的类型
13反射(转)- <wbr>1            new TestObjectType().TestObjectTypeNow(A, B);            
14反射(转)- <wbr>1        }
15反射(转)- <wbr>1    }
16反射(转)- <wbr>1
17反射(转)- <wbr>1    class AX
18反射(转)- <wbr>1    {
19反射(转)- <wbr>1    }
20反射(转)- <wbr>1
21反射(转)- <wbr>1    class AXzhz
22反射(转)- <wbr>1    {
23反射(转)- <wbr>1    }
24反射(转)- <wbr>1
25反射(转)- <wbr>1    class TestObjectType
26反射(转)- <wbr>1    {
27反射(转)- <wbr>1        //构造函数的默认修饰为private
28反射(转)- <wbr>1        internal void TestObjectTypeNow(object A, object B)
29反射(转)- <wbr>1        {
30反射(转)- <wbr>1            Type tpA A.GetType();
31反射(转)- <wbr>1            Type tpB B.GetType();
32反射(转)- <wbr>1            Console.WriteLine(tpA.FullName);
33反射(转)- <wbr>1            Console.WriteLine(tpB.FullName);
34反射(转)- <wbr>1            Console.ReadLine();
35反射(转)- <wbr>1        }
36反射(转)- <wbr>1    }
37反射(转)- <wbr>1}

输出结果:
TestReflection.AX
TestReflection.AXzhz
【分析】通过对象实例(A,B),可以使用GetType()方法获取该对象属于哪个类.非类型转化后的类,而是构造该类型的类
【应用】给个变量/对象实例,测试下它属于哪个类,顺带还给出该类所属的Assembly
【附】另外一种获取类型的方法是通过Type.GetType以及Assembly.GetType方法,如:
       Type t = Type.GetType("TestReflection.AX");
    需要注意的是,前面我们讲到了命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件
Type类:表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。     发晕,对泛型没研究.

②我们获得的Type实例有什么用?
   ⅰ获得类名:如上面例子的FullName属性,返回TestReflection.AX
       这个也比较恶心,直接用A.ToString();返回的也是这个结果.
   ⅱ创建该类的对象.你首先通过ⅰ来获得类名AX
       AX ax = (AX)Activator.CreateInstance(tpA);
       都知道是AX类型了,怎么不new一个???鸡肋的东西.
      上面的【附】真不知道是干嘛吃的,都知道了类TestReflection.AX,直接new一个就可以了.
    ⅲ获得对象所属类的相关信息
         通过tpA的相关属性,来得到该类的相关信息.
         其实你通过A的相关属性,也可以得到该类的相关信息.还简单省事,真不知道Type类到底是干嘛吃的.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多