zoukankan      html  css  js  c++  java
  • 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,对方法,属性等的反射。

  • 相关阅读:
    Selenium断言的使用,等待
    Selenium的鼠标事件,键盘事件
    json,HTTP协议
    HTML,js的基础知识
    Selenium3详解:元素定位方法
    Python操纵Excel,数据库
    Spring拦截器(权限的管理)
    完成登陆功能
    配置使用sitemesh
    Hibernate+pager-taglib实现分页功能
  • 原文地址:https://www.cnblogs.com/anyihen/p/5321409.html
Copyright © 2011-2022 走看看