要用C#反射技術的話,首先得引入System.Reflection 命名空間,這個命名空間裏的類,具有動態加載程序集、類型,動態調用方法、設置和取得屬性和字段的值、可以獲取類型和方法的信息的功能。
要想對一個類型實例的屬性或字段進行動態賦值或取值,首先得得到這個實例或類型的Type,微軟已經爲我們提供了足夠多的方法。
1 Class MyClass
2 {
3 private int field;
4 public int Field
5 {
6 get
7 {
8 return this.field;
9 }
10 set
11 {
12 this.field = value;
13 }
14 }
15 }
如果有個這個類型的實例:
MyClass myObj = new MyClass();
要動態地爲這個實例的屬性Field賦值,那麼得先得到這個實例的類型:
Type t = typeof(MyClass);
另一種方法是:
Type t = myObj.GetType();
只要得到了對象的類型,那麼就可以利用反射對這個對象“爲所欲爲”了,哈哈。
利用反射爲對象裏的屬性Field賦值了:
t.GetProperty("Field").SetValue(myObj, value, null);
或者
myObj.GetType().GetProperty("Field").SetValue(myObj, value, null);
或者
myObj.GetType().GetProperty("Field").GetValue(myObj, value, null);
如果把屬性名和要賦的值寫道配置文件裏的話,我們就可以達到程序運行期間動態的爲屬性賦值了。
利用反射獲取對象裏的屬性Field的值的方法:
t.GetProperty("Field").SetValue(myObj,null));
t.GetProperty("Field").GetValue(myObj,null);