【c#】反射

理解

反射的原理

在我看来,反射就是一个快速操作元数据的工具,它可以快速通过对一个模板对象操作来实现对其他对象操作实现相同效果。

C#反射技术主要基于System.Type类和System.Reflection.Assemble类,通过Type类可以访问关于任何数据类型的信息,Assemble类用于访问给定程序集的相关信息,或把这个程序集, 加载到程序中。

反射可获取的对象信息

命名空间 描述
System.Reflection.Assembly 程序集
System.Reflection.MemberInfo 成员信息
System.Reflection.EventInfo 事件
System.Reflection.FieldInfo 字段
System.Reflection.MethodBase 基类方法
System.Reflection.ConstructorInfo 构造函数
System.Reflection.MethodInfo 方法
System.Reflection.PropertyInfo 属性
System.Type 类、对象的类型对象

代码展示

 Person p = new Person();
            p.name = "小刘";
            p.sex = "男";
            p.study();

            //反射
            //指定一个程序集
            Assembly assembly = Assembly.LoadFrom(".dll");
            //Assembly assembly = Assembly.LoadFile(".dll");

            //获取程序集中一个对象/全部对象的类型,
            Type t1 = assembly.GetType("dll文件中的一个class");
            Type t3 = typeof(Person);   //直接获取类的类型


            //获取对象类型的属性方法、、
            //方式一
            PropertyInfo[] property = t3.GetProperties();  // 获取全部属性
            // PropertyInfo[] propertyp1 = typeof(PERSONP).GetProperties();
            MethodInfo study = t1.GetMethod("study");  //获取指定方法
            ConstructorInfo[] constructors = t1.GetConstructors();   //结构体
            //ConstructorInfo cons = t1.GetConstructor();

             //dynamic动态创建反射对象实例
            dynamic objt1 = Activator.CreateInstance(t1);  //创建实例对象

            //方式二
            //foreach(),获取需要被反射(复刻)的对象类型
            foreach (var p3 in property)
            {
                var pro = property.SingleOrDefault(a => a.Name == p3.Name);
                var st = study.Invoke(objt1, null);
                Console.WriteLine($"{p3.Name}+{p3.PropertyType} +{p3.GetValue(p)}");
                if (p3.Name.Equals("name"))
                {
                    p3.SetValue(p, "二嘎子");
                }
                if (p3.Equals(p))
                {
                    p3.SetValue(p.id, "088826");
                    p3.SetValue(p.sex, "男");
                }

            }

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值