type.invokemember 方法
class program
);//執行帶乙個引數靜態方法printstatic
rf.fncmethod("dosthonepara", new
object );//執行帶乙個帶參方法dosthonepara
rf.fncmethod("dosthtwopara", new
object );//執行帶兩個個帶參方法dosthtwopara
}}
class reflectutils
}
class itemmethod
public
itemmethod(string x)
int32 myfield;
public
itemmethod(ref int32 x)
public
override string tostring()
public
static
void
printnopara()
public
static
void
printstatic(string stm)
", stm);
}public
void
printnotstatic(string stm)
", stm);
}public
void
dosthonepara(string sth)
", sth);
}public
void
dosthtwopara(string sth, int ct)
,", sth, ct);
}public int32 myprop
set}
#endregion
internal
void
methodcode(string methodname, object para)
;console.writeline("建構函式執行前x值:.", args[0]);
object classinstance = classtype.invokemember(null,
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.createinstance, null, null, args);
console.writeline("type: " + classinstance.gettype().tostring());
console.writeline("建構函式執行後x值:.", args[0]);
#region 讀取、寫入欄位.
classtype.invokemember("myfield",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.setfield, null, classinstance, new object );
int32 v = (int32)classtype.invokemember("myfield",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.getfield, null, classinstance, null);
console.writeline("myfield: " + v);
#endregion
判斷是否靜態
// 靜態方法可以不傳target(型別的例項)引數。非靜態方法要求必須提供target(型別的例項)引數.
classtype.invokemember(methodname, bindingflags.invokemethod, null, classinstance, para);
#region 讀取、寫入屬性。首先,嘗試分配乙個無效的值;然後分配乙個有效的值;最後,獲取值。
try );
}catch (targetinvocationexception e)
",e.innerexception);
}classtype.invokemember("myprop",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.setproperty, null, classinstance, new object );
v = (int32)classtype.invokemember("myprop",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.getproperty, null, classinstance, null);
console.writeline("myprop: " + v);
#endregion
}}
C 反射總結 獲取 命名空間 類名 方法名
一 獲取 命名空間 類名 方法名 using system using system.collections.generic using system.linq using system.text using system.diagnostics using system.reflection na...
關於根據方法名稱呼叫方法的反射的實現的集中方案
專案中將客戶的資訊儲存到本地的cookie中的使用的 由於每次查詢時可以從cookie中獲取,如果改變必須儲存到cookie中,同時cookie中的值僅僅為字串形式儲存在本地磁碟使用所以必須確保值為字串格式。同時實時轉換。從cookie獲取的物件 採用apache commons beanutils...
反射 通過反射呼叫類中指定方法 屬性
一 呼叫指定方法 通過反射,呼叫類中的方法,通過method類完成。步驟 1 通過class類的getmethod string name,class.parametertypes 方法取得乙個method物件,並設定此方法操作時所需要的引數型別。2 使用object invoke object o...