• C# 反射之属性操作


    一、反射-类操作

    //1.获取对象所有的属性名
    Student stu = new Student();
    //获取当前类名称
    Console.WriteLine(stu.GetType().Name);
    //命名空间 和名称
    Console.WriteLine(stu.GetType().FullName);
    //2.指定类型,动态创建对象
    Student stu2 = Activator.CreateInstance<Student>();
    Console.WriteLine(stu2.ToJsonString());

    二、反射属性操作之PropertyInfo

    使用PropertyInfo操作属性,简单方便

    //反射属性操作 方式二
    Student stu = new Student();
    Type t = stu.GetType();
    /*****操作所有属性*****/
    //1.获取指定名称的属性
    PropertyInfo[] pro2 = t.GetProperties();
    foreach (PropertyInfo item in pro2)
    {
        //Name----属性名称
        //PropertyType----字段类型 例如:System.Int32
        Console.WriteLine(item.Name + "--->" + item.MemberType + "--->" + item.PropertyType);
    }
    
    //2.获取或设置属性的值
    foreach (PropertyInfo item in pro2)
    {
        object value = null;
        if (item.Name == "ID")
            value = 1;
        else
            value = "张三";
        item.SetValue(stu, value);
        //获取属性值
        Console.WriteLine(item.GetValue(stu));
    }
    /**操作单个属性***/
    PropertyInfo id = t.GetProperty("ID");
    id.SetValue(stu,2);
    Console.WriteLine(id.GetValue(stu));

    三、反射属性操作之MemberInfo

    MemberInfo可以操作所有的类成员

    Student stu = new Student();
    //反射属性操作 方式一
    Type t = stu.GetType();
    //GetMembers() 返回当前 System.Type 的所有公共成员
    //获取对象的所有公共属性名称和属性值
    MemberInfo[] members = t.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
    foreach (MemberInfo item in members)
    {
        if (item.MemberType != MemberTypes.Property)
        {
            Console.WriteLine("当前属性为:" + item.MemberType);
            continue;
        }
        Console.WriteLine(item.Name); //属性名称
        Console.WriteLine(item.MemberType);//属性类型
                                            //获取属性的值
        object value = null;
        if (item.Name == "ID")
            value = 1;
        else value = "张三";
        t.InvokeMember(item.Name, BindingFlags.SetProperty, null, stu, new object[] { value });
        //设置属性的值
        object result = t.InvokeMember(item.Name, BindingFlags.GetProperty, null, stu, null);
        Console.WriteLine(result);
    }

    更多参考:

    http://blog.163.com/m13864039250_1/blog/static/213865248201372833416948/

    http://blog.163.com/m13864039250_1/blog/static/213865248201372123134158/

  • 相关阅读:
    深入理解计算机系统(第三版)作业题答案(第三章)
    深入理解计算机系统(第三版)作业题答案(第二章)
    greedy算法(python版)
    Dijkstra算法(Swift版)
    Breadth-first search 算法(Swift版)
    递归演示程序(swift)
    Node.js之异步流控制
    Node.js之单利模式
    Node.js之循环依赖
    一个完整的Node.js RESTful API
  • 原文地址:https://www.cnblogs.com/tianma3798/p/6128010.html
Copyright © 2020-2023  润新知