請問如何在給定類名稱和方法名稱的靜態類上調用方法?在靜態類上調用方法,因爲它的類型名稱和方法名稱是字符串
例如:
鑑於System.Environment
和GetFolderPath
,我想使用Reflection
調用Environment.GetFolderPath()
。
請問如何在給定類名稱和方法名稱的靜態類上調用方法?在靜態類上調用方法,因爲它的類型名稱和方法名稱是字符串
例如:
鑑於System.Environment
和GetFolderPath
,我想使用Reflection
調用Environment.GetFolderPath()
。
僅有
Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments);
其中typeName
是類型爲字符串的名稱,methodName
是所述方法作爲字符串的名稱,和arguments
是包含參數來調用該方法對象的數組。
這裏,你會怎麼做一個基本的輪廓:
編輯:如果您不知道靜態類的名稱空間,這將工作。否則,使用DanielBrückner的解決方案就簡單多了。
我覺得你還是需要掃描的AppDomain - 如果你能創建一個類的實例,這將是動態語言 – 2009-09-13 17:03:01
Type.GetType? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb 2009-09-13 17:06:48
這可能是反射過程中發生的事情的字面描述,但我不認爲這個答案對OP有幫助,因爲它實際上並沒有證明或解釋如何使用該步驟描述您所概述的步驟。網絡框架API – Crippledsmurf 2009-09-13 17:09:10
System.Reflection.Assembly info = typeof(System.Environment).Assembly;
Type t = info.GetType("System.Environment");
MethodInfo m = t.GetMethod("GetFolderPath");
object result = m.Invoke(null, arguments);
首先,你需要獲得類型(通過重複使用反射大會)
看到此鏈接瞭解詳細信息:http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx
或使用
Assembly.GetType
一旦你有您可以使用反射或迭代成員來使用類型,或者使用反射或
MethodInfo method = typeof(MyClass).GetMethod("MyMethod");
然後您可以使用MethodInfo.Invoke
並傳遞參數以在您想調用該方法時調用該方法。
** MyClass **是公開的,而不是爲***內部靜態類***的方式? – Kiquenet 2016-02-23 11:42:22
你在做什麼這裏反映命名Environment
類型和使用GetPropery
和GetGetMethod
方法來獲取Environment.CurrentDirectory
財產,像這樣的get方法;
var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod();
var currentDirectory = (string)getMethod.Invoke(null, null);
調用屬性的get方法返回它的值並且等價於;
var value = Environment.CurrentDirectory;
哇,好吧是的工作 - 不知道Type.GetType - 只是確保靜態類名稱是完全限定的命名空間 – 2009-09-13 17:07:34
爲***'內部靜態類***'工作? – Kiquenet 2016-02-23 11:41:44
@GeorgeMauer如果沒有命名空間怎麼辦? – MonsterMMORPG 2016-03-01 10:47:55