C 反射執行指定方法名 過載

2021-08-15 01:29:07 字數 2829 閱讀 5900

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...