C# 反射

Posted 安以痕_陈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 反射相关的知识,希望对你有一定的参考价值。

           刚工作没多久,需要对以往的知识进行复习和巩固。先讲讲最近在公司常用到的反射机制。

反射(Reflection):提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。

反射用到的命名空间:
    System.Reflection


反射用到的主要类:
    System.Type 类--通过这个类可以访问任何给定数据类型的信息。
    System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。

反射一般运用于3种情况

1,基于System.Type的反射;2,对方法,属性等的反射;3,动态加载以及推迟绑定。

一,基于System.Type的反射 

 注:Type 类是反射类的核心。Type 封装了对象类型的表示。Type 类是访问元数据的主要手段。

例1,

        static void Main(string[] args)
        {
            string s1 = "Hello Reflection!";
            int s2 = 888;
            Type t1 = s1.GetType();//获取s1的类型
            Type t2 = s2.GetType();
            Console.WriteLine(t1.FullName);// 获取t1的完全限定名
            Console.WriteLine(t2);// 有时候,t1.Fullname 与 t1 的运行效果是一样的,但下面就有本质的区别。

}

技术分享 

 例 2,

          static void Main(string[] args)
        {

           Type t3 = Type.GetType("System.String", false, true);  //获取指定名称的 System.Type ,bool 型 - 是否抛出异常(false:找不到指定类型不抛出异常),

            //   bool 型 - 是否忽视区分大小写(true: 不区分大小写)
            Type t4 = Type.GetType("System.Strgging", false, true);
            Console.WriteLine(t3);

            Console.WriteLine("-----------");
            Console.WriteLine(t4);

            Console.WriteLine("-----------");

         }

技术分享

 注意啦,例1上的 t1 与 t1.FullName 区别来啦

将例2的 Console.WriteLine(t4) ; 改为 Console.WriteLine(t4.FullName); 查看运行结果。

技术分享  bug 来了!!!技术分享此处异常是在

 执行 Console.WriteLine(t4.FullName);时发生的。与上面  Type t4 = Type.GetType("System.Strgging", false, true); 的 bool false 的不抛出异常无关。

例3,

  用 typeof 关键字 获取类型 与 GetType() 又不一样啦。

    typeof(string)//直接填写其类型即可

      static void Main(string[] args)
        {

            Type t5 = typeof(string);
            Type t6 = typeof(string2222);
            Console.WriteLine(t5);
            Console.WriteLine(t6);

}

// 这里面t5.FullName 与 t5 运行效果是一样的。 但是当所输入的类型不存在,即使你是 t6 不是 t6.FullName 也会抛异常的,不会显示为空。

技术分享

 

    Type仍有许多用途,具体的查看一些相关书籍,先讲一些小例题,让大家熟悉一下反射的浅显内容,在 C#反射(二)在讲解  2,对方法,属性等的反射。

 

以上是关于C# 反射的主要内容,如果未能解决你的问题,请参考以下文章

反射机制(Reflection)

Unity C# 游戏开发 反射 Reflection 案例讲解(图文详细,带源码)

Swift - 反射(Reflection)的介绍与使用样例(附KVC介绍)

C# 反射

Unity3D日常开发Unity3D中 C#反射Reflection的使用

Unity3D日常开发Unity3D中 C#反射Reflection的使用