一、反射-类操作
//1.获取对象所有的属性名Student stu = new Student();//获取当前类名称Console.WriteLine(stu.GetType().Name);//命名空间 和名称Console.WriteLine(stu.GetType().FullName);//2.指定类型,动态创建对象Student stu2 = Activator.CreateInstance();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);}
更多参考: