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

时间:2009-09-13 16:53:03

标签: c# reflection

如果给出类名和方法名,我怎样才能在静态类上调用方法呢?

例如:

鉴于System.EnvironmentGetFolderPath,我想使用Reflection来致电Environment.GetFolderPath()

5 个答案:

答案 0 :(得分:41)

只需

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

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

答案 1 :(得分:4)

首先,您需要获取Type(通过使用反射迭代装配)

请参阅此链接了解详情:http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

或使用

Assembly.GetType

一旦掌握了类型,您就可以使用反射或

迭代成员
MethodInfo method = typeof(MyClass).GetMethod("MyMethod");

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

答案 2 :(得分:3)

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 :(得分:2)

您在此处所做的是反映名为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;

答案 4 :(得分:1)

以下是您要做的事情的基本概要:

  1. 扫描当前AppDomain中的所有对象 - 找到与您知道的类名相匹配的对象
  2. 使用您在该对象上知道的名称获取静态方法
  3. 动态调用它。
  4. 编辑:如果你不知道静态类的命名空间,这将有效。否则,使用DanielBrückner的解决方案会更简单。