反射射射射!

首先,先谈谈反射是什么:
反射 是 程序可以访问,检测和修改它本身状态或者行为的一种能力。
反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
然后,可以调用类型的方法或访问其字段和属性。
优点:1.反射提高了程序的灵活性和扩展性。
          2.降低耦合性,提高自适应能力。
          3.它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点:1.性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远远慢于直接代码。因此反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用哦。
          2.使用反射会模糊程序内部逻辑;程序猿希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂哦。
查看类中的构造方法:NewClassw nc = new NewClassw();
        Type t = nc.GetType();
        ConstructorInfo[] ci = t.GetConstructors();    //获取类的所有构造函数
        foreach (ConstructorInfo c in ci) //遍历每一个构造函数
        {
            ParameterInfo[] ps = c.GetParameters();    //取出每个构造函数的所有参数
            foreach (ParameterInfo pi in ps)   //遍历并打印所该构造函数的所有参数
            {
                Console.Write(pi.ParameterType.ToString()+" "+pi.Name+",");
            }
            Console.WriteLine();
        }
查看类中的属性,方法,字段:
 NewClassw nc = new NewClassw();
        Type t = nc.GetType();
        PropertyInfo[] pis = t.GetProperties();
        foreach(PropertyInfo pi in pis)
        {
            Console.WriteLine(pi.Name);
        }
        NewClassw nc = new NewClassw();
        Type t = nc.GetType();
        MethodInfo[] mis = t.GetMethods();
        foreach (MethodInfo mi in mis)
        {
            Console.WriteLine(mi.ReturnType+" "+mi.Name);
        }

        NewClassw nc = new NewClassw();
        Type t = nc.GetType();
        FieldInfo[] fis = t.GetFields();
        foreach (FieldInfo fi in fis)
        {
            Console.WriteLine(fi.Name);
        }
 
用反射生成对象,并调用属性,方法和字段:
        NewClassw nc = new NewClassw();
        Type t = nc.GetType();
        object obj = Activator.CreateInstance(t);
        //取得ID字段
        FieldInfo fi = t.GetField("ID");
        //给ID字段赋值
        fi.SetValue(obj, "k001");
        //取得MyName属性
        PropertyInfo pi1 = t.GetProperty("MyName");
        //给MyName属性赋值
        pi1.SetValue(obj, "grayworm", null);
        PropertyInfo pi2 = t.GetProperty("MyInfo");
        pi2.SetValue(obj, "hi.baidu.com/grayworm", null);
        //取得show方法
        MethodInfo mi = t.GetMethod("show");
        //调用show方法
        mi.Invoke(obj, null);
 
 
 
小总结:
 

 

扩展一下:

 

 

 

 

记录点滴!

2019.7.15

 

 

posted on 2019-07-15 16:07  领衔主演¨  阅读(171)  评论(0编辑  收藏  举报

导航