C#之反射(PropertyInfo類)

一、引入命名空間:System.Reflection;程序集:mscorlib(在mscorlib.dll中)數組

二、示例代碼(主要是getType()、setValue()、getValue()方法):spa

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Reflection;  5 using System.Text;  6 using System.Threading.Tasks;  7  8 namespace 反射  9 {  10 class Program  11  {  12 /// <summary>  13 /// 反射描述了程序集、模塊、類型的對象(Type類型)。能夠使用反射動態建立類型的實例,將實例綁定到現有對象,或從現有對象獲取類型並調用其方法或訪問其字段和屬性  14 /// 若是代碼中使用了特性,能夠利用反射來訪問它們  15 /// </summary>  16 static void Main(string[] args)  17  {  18  19 //一、GetType()的解釋及示例  20 //  21 // 摘要:  22 // 獲取當前實例的 System.Type。  23 //  24 // 返回結果:  25 // System.Type 實例,表示當前實例的確切運行時類型。  26  27 //下面使用靜態方法GetType(從Object基類派生的全部類型都繼承該方法)獲取其類型的簡單反射示例  28 Student stu1 = new Student() { id = 1, name = "張三", length = 175, datetime = DateTime.Now };//  29 Student stu2 = new Student() { id = 2, name = "李四", length = 180, datetime = DateTime.Now };//name = "李四", datetime = DateTime.Now  30  31 var list = new List<Student>();  32  list.Add(stu1);  33  list.Add(stu2);  34  35 Type stuType = stu1.GetType();  36 Type listType = list.GetType();  37  38 Console.WriteLine("---------------getType()輸出類型----------------");  39 Console.WriteLine(stuType);//輸出Student的類型  40 Console.WriteLine(stu1.id.GetType());//輸出Student的id的類型  41 Console.WriteLine(stu1.name.GetType());//輸出Student的name的類型  42 Console.WriteLine(stu1.datetime.GetType());//輸出Student的datetime的類型  43  44 Console.WriteLine(listType);//輸出List的類型  45  46  47 //二、GetProperties()的解釋及示例  48 //  49 // 摘要:  50 // 返回當前 System.Type 的全部公共屬性。  51 //  52 // 返回結果:  53 // 表示當前 System.Type 的全部公共屬性的 System.Reflection.PropertyInfo 對象數組。- 或 -若是當前 System.Type  54 // 沒有公共屬性,則爲 System.Reflection.PropertyInfo 類型的空數組。  55  56 PropertyInfo[] stuPropertyS = stuType.GetProperties();  57 PropertyInfo[] listPropertyS = listType.GetProperties();  58  59 //Console.WriteLine(stuPropertyS.Count());  60 //Console.WriteLine(stuPropertyS.Length);  61  62 //三、SetValue()的解釋及示例  63 //  64 // 摘要:  65 // 用索引屬性的可選索引值設置該屬性的值。  66 //  67 // 參數:  68 // obj:  69 // 將設置其屬性值的對象。  70 //  71 // value:  72 // 此屬性的新值。  73 //  74 // index:  75 // 索引化屬性的可選索引值。對於非索引化屬性,此值應爲 null。 76 // 77 // 異常: 78 // System.ArgumentException: 79 // index 數組不包含所需類型的參數。- 或 -未找到該屬性的 set 訪問器。 80 // 81 // System.Reflection.TargetException: 82 // 該對象與目標類型不匹配,或者某屬性是實例屬性但 obj 爲 null。 83 // 84 // System.Reflection.TargetParameterCountException: 85 // index 中參數的數目與已編制索引的屬性所採用的參數的數目不相符。 86 // 87 // System.MethodAccessException: 88 // 嘗試非法訪問某類中私有或受保護的方法。 89 // 90 // System.Reflection.TargetInvocationException: 91 // 設置屬性值時出錯。例如,爲索引屬性指定的索引值超出範圍。System.Exception.InnerException 屬性指示錯誤的緣由。 92 Console.WriteLine("---------------setValue()給某屬性賦值----------------"); 93 PropertyInfo stuPro = stuPropertyS.FirstOrDefault(x => x.Name == "name");//這裏是找name的屬性名 94 stuPro.SetValue(stu1, "王五", null); 95 Console.WriteLine(stu1.name); 96 97 98 //四、GetType()方法的解釋和示例 99 // 100 // 摘要: 101 // 用索引化屬性的可選索引值返回指定對象的該屬性值。 102 // 103 // 參數: 104 // obj: 105 // 將返回其屬性值的對象。 106 // 107 // index: 108 // 索引化屬性的可選索引值。 對於非索引化屬性,該值應爲 null。 109 // 110 // 返回結果: 111 // 指定對象的屬性值。 112 // 113 // 異常: 114 // System.ArgumentException: 115 // index 數組不包含所需類型的參數。 - 或 - 未找到該屬性的 get 訪問器。 116 // 117 // System.Reflection.TargetException: 118 // 該對象與目標類型不匹配,或者某屬性是實例屬性但 obj 爲 null。 119 // 120 // System.Reflection.TargetParameterCountException: 121 // index 中參數的數目與已編制索引的屬性所採用的參數的數目不相符。 122 // 123 // System.MethodAccessException: 124 // 嘗試非法訪問某類中私有或受保護的方法。 125 // 126 // System.Reflection.TargetInvocationException: 127 // 檢索屬性值時出錯。 例如,爲索引屬性指定的索引值超出範圍。 System.Exception.InnerException 屬性指示錯誤的緣由。 128 Console.WriteLine("---------------getValue()遍歷屬性值----------------"); 129 foreach (var v in stuPropertyS)//遍歷屬性 130 { 131 Console.WriteLine(v.GetValue(stu1, null)); 132 } 133 134 135 Console.ReadLine(); 136 } 137 } 138 139 public class Student 140 { 141 public int id { get; set; } 142 public string name { get; set; } 143 public decimal length { get; set; } 144 public DateTime datetime { get; set; } 145 } 146 }

三、運行結果:code

四、下面是PropertyInfo 類型主要公開的成員,可供參考(摘自:http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyinfo(v=vs.110).aspx對象

相關文章
相關標籤/搜索