[英]How to run any method knowing only her fully qualified name
我有一個方法的名稱:“ Garden.Plugins.Code.Beta.Business.CalculateRest”
怎么運行呢? 我考慮過像RunMethod(string MethodName)這樣基於花式反射的解決方案
BindingFlags.Public | BindingFlags.Static
BindingFlags.Public | BindingFlags.Static
。 如果要調用一個實例方法或一個帶有參數的方法,則還需要弄清楚如何獲取該信息。
它不像將最后一個點左側的所有內容都當作文字類型名稱那樣簡單。 如果您具有以下形式的表單:
XYZ類型
那么X,Y和Z不一定是命名空間。 它們本身也可以是類型,而后續部分可以是內部類:
class X
{
class Y
{
// etc
}
}
如果是這種情況,那么Type.GetType(“ X.YU”)不會解析為Y類。相反,clr用+符號分隔內部類,因此您實際上需要調用Type.GetType(“ X + Y“);
如果您要調用的方法是params方法,那么您需要做一些額外的工作。 您需要將變量參數匯總到一個數組中並傳遞它。 您可以通過獲取方法的ParameterInfo數據並查看最后一個參數是否附加了ParamArray屬性來檢查變量參數。
會慢的,相信我。 因此,請勿將其放在關鍵位置。
除此之外,您只需要“手工”即可。 開始枚舉所有名稱空間,類等,直到找到所需的內容。 我不認為已經有任何花哨的預制物可以做到這一點。 (盡管我沒有搜索)
如果類型是實例類型:
Type.GetType("Garden.Plugins.Code.Beta.Business")
.GetMethod("CalculateRest").Invoke(myInstanceOfTheType, param1, param2);
如果是靜態方法:
Type.GetType("Garden.Plugins.Code.Beta.Business")
.GetMethod("CalculateRest").Invoke(null, param1, param2);
如果不帶參數,則忽略“ param1,param2等” ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.