在静态类上调用方法,并将其类型名称和方法名称作为字符串

我怎么能在给定类名和方法名的静态类上调用方法呢?

例如:

给定System.EnvironmentGetFolderPath ,我想使用Reflection来调用Environment.GetFolderPath()

只是

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

其中typeName是作为字符串的类型的名称, methodName是作为字符串的方法的名称, arguments是包含调用方法的参数的对象数组。

首先,您需要获取Type(通过使用reflection迭代程序集)

有关详细信息,请参阅此链接: http : //msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

或使用

 Assembly.GetType 

一旦掌握了类型,就可以使用reflection或者迭代成员

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

然后,您可以使用MethodInfo.Invoke并在您想要调用它时传递参数来调用该方法。

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

你在这里做的是反映名为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; 

以下是您将要做的基本概述:

  1. 扫描当前AppDomain中的所有对象 – 找到与您知道的类名相匹配的对象
  2. 使用您在该对象上知道的名称获取静态方法
  3. 动态调用它。

编辑:如果您不知道静态类的命名空间,这将起作用。 否则,使用DanielBrückner的解决方案会更简单。