【正文】
①什么是反射?
反射提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例(见④ ),将类型绑定到现有对象(这个不会),或从现有对象中获取类型(见②③ )。然后,可以调用类型的方法或访问其字段和属性。
最最简单的反射:如下

 1黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System;
 2黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System.Reflection;
 3黄聪:C#反射 Reflection学习随笔(完结篇)_AXnamespace TestReflection
 4}


输出结果:
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类到底是干嘛吃的.

窥一斑而知全豹,一个对象实例泄漏的密秘(这个比较爽)
通过一个对象实例,我们可以获得包含这个对象实例的类的Assembly,进而获得整个Assembly的信息.

 1黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System;
 2黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System.Reflection;
 3黄聪:C#反射 Reflection学习随笔(完结篇)_AXnamespace TestReflection
 4}


【注】通过测试,发现只能获得public类型的信息.

④动态创建对象实例【经典】
是实现抽象工厂的基础,也是实现抽象工厂的核心技术,通过它,可以动态创建一个你想要的对象.如下面的例子是演示如何动态创建ChineseName或EnglishName的实例

 1黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System;
 2黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System.Reflection;
 3黄聪:C#反射 Reflection学习随笔(完结篇)_AXnamespace TestReflection
 4}


⑤获得整个解决方案的所有Assembly(这个有点用)
如果你不太清楚自己的解决方案中都用到了哪些Assembly,可以使用下面的方法,如果再想得到Assembly里的信息,见③

 1黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System;
 2黄聪:C#反射 Reflection学习随笔(完结篇)_AXusing System.Reflection;
 3黄聪:C#反射 Reflection学习随笔(完结篇)_AX
 4黄聪:C#反射 Reflection学习随笔(完结篇)_AXnamespace TestReflection
 5

相关文章: