2009-09-13 108 views

回答

32

僅有

Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments); 

其中typeName是類型爲字符串的名稱,methodName是所述方法作爲字符串的名稱,和arguments是包含參數來調用該方法對象的數組。

+0

哇,好吧是的工作 - 不知道Type.GetType - 只是確保靜態類名稱是完全限定的命名空間 – 2009-09-13 17:07:34

+0

爲***'內部靜態類***'工作? – Kiquenet 2016-02-23 11:41:44

+0

@GeorgeMauer如果沒有命名空間怎麼辦? – MonsterMMORPG 2016-03-01 10:47:55

1

這裏,你會怎麼做一個基本的輪廓:

  1. 掃描所有當前的AppDomain對象 - 找到一個符合你知道什麼類名是
  2. 獲取靜態方法用你知道那個物體的名字
  3. 動態地調用它。

編輯:如果您不知道靜態類的名稱空間,這將工作。否則,使用DanielBrückner的解決方案就簡單多了。

+0

我覺得你還是需要掃描的AppDomain - 如果你能創建一個類的實例,這將是動態語言 – 2009-09-13 17:03:01

+1

Type.GetType? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb 2009-09-13 17:06:48

+2

這可能是反射過程中發生的事情的字面描述,但我不認爲這個答案對OP有幫助,因爲它實際上並沒有證明或解釋如何使用該步驟描述您所概述的步驟。網絡框架API – Crippledsmurf 2009-09-13 17:09:10

1
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); 
3

首先,你需要獲得類型(通過重複使用反射大會)

看到此鏈接瞭解詳細信息:http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

或使用

Assembly.GetType 

一旦你有您可以使用反射或迭代成員來使用類型,或者使用反射或

MethodInfo method = typeof(MyClass).GetMethod("MyMethod"); 

然後您可以使用MethodInfo.Invoke並傳遞參數以在您想調用該方法時調用該方法。

+0

** MyClass **是公開的,而不是爲***內部靜態類***的方式? – Kiquenet 2016-02-23 11:42:22

1

你在做什麼這裏反映命名Environment類型和使用GetProperyGetGetMethod方法來獲取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; 
相關問題