我应该如何在已知类名和方法名的情况下调用静态类上的方法呢?
例如:
已知 System.Environment
和 GetFolderPath
,我想使用Reflection
来调用Environment.GetFolderPath()
。
我应该如何在已知类名和方法名的情况下调用静态类上的方法呢?
例如:
已知 System.Environment
和 GetFolderPath
,我想使用Reflection
来调用Environment.GetFolderPath()
。
只是
Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments);
其中typeName
是类型的名称字符串,methodName
是方法的名称字符串,而arguments
则是一个包含要调用该方法所需参数的对象数组。
首先,您需要通过反射迭代程序集获取类型。
请参考此链接了解详情:http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx
或者使用:
Assembly.GetType
MethodInfo method = typeof(MyClass).GetMethod("MyMethod");
当您想调用方法时,您可以使用 MethodInfo.Invoke
并传递参数来调用该方法。
MethodInfo methodInfo = typeof(InternalStaticClassName).GetMethod("PrivateMethodNameYouWantToCall", BindingFlags.NonPublic | BindingFlags.Static);
,然后调用它时传递 null
作为目标对象和一个包含所需参数的对象数组。 - RyanSystem.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
的类型进行反射,并使用GetProperty
和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;
以下是您需要执行的基本概述:
编辑:如果您不知道静态类的命名空间,则此方法可行。否则,请使用Daniel Brückner的解决方案,因为它更简单。
typeof(Program).GetMethod($"F{functionNumber}").Invoke(null, null);
,并使用名为functionNumber的变量来调用它们,方法名称为F1(),F2(),F3()... - Youkko