要用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();只要我們得到了對象的類型那麼我們就可以利用反射對這個對象“為所欲為”了,哈哈。
t.GetProperty("Field").SetValue(myObj,1,null);這樣我們就為對象裡的屬性FIEld賦值了。如果把屬性名和要賦的值寫道配置文件裡的話,我們就可以達到程序運行期間動態的為屬性賦值了。
利用反射獲取屬性值的方法:
int propValue=Convert.ToInt32(t.GetProperty("FIEld").SetValue(myObj,null));好了,關於利用反射動態的為對象的屬性賦值取值就到這裡了。
(C#)利用反射動態調用類成員
使用反射動態調用類成員,需要Type類的一個方法:InvokeMember。對該方法的聲明如下:
public object InvokeMember(
string name,
BindingFlags invokeAttr,
Binder binder,
object target,
object[] args
);