一、反射-類操作
//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/