使用类的静态方法,当你只有类的类型的字符串作为一个字符串
我想知道是否有可能使用类方法时,你只知道它的字符串值的类名称。使用类的静态方法,当你只有类的类型的字符串作为一个字符串
比方说,我有一个类和类中我有一个像
public class SomeClass
{
public static string Do()
{
//Do stuff
}
}
静态方法和使用类时,我想是这样
string str = (GetType(SomeClass)).Do();
当使用我想给方法这个类的名字就像字符串一样,我想把SomeClass作为一个字符串。
var t = Type.GetType("MyNamespace.SomeClass");
var m = t.GetMethod("Do");
m.Invoke(null, new object[] { /* Any arguments go here */ });
当我尝试这个,甚至键入t = Type ... GetMethod似乎没有定义。 – 2015-02-08 18:43:50
使用Type.GetMethod
获取该方法的方法信息对象,然后调用MethodInfo.Invoke
来执行它。对于静态方法,传递null作为第一个参数(对象值):
Type type = typeof(SomeClass);
type.GetMethod("Do").Invoke(null, null);
如果你不知道在编译时的类名,你也可以使用object.GetType
,Type.GetType
或Assembly.GetType
要获得类型的对象在运行时(取决于你有什么信息)。然后,你可以以同样的方式使用它:
Type type = someObject.GetType(); // or Type.GetType("SomeTypeName");
type.GetMethod("Do").Invoke(null, null);
为了安全起见,请务必检查GetMethod
是否实际返回的方法,让你有一些确认该类型存在的方法即可。
只在运行时才知道类名。 – 2015-02-08 18:20:59
如果OP在编译时足够了解'typeof(SomeClass)',那么他们可能只需编写'SomeClass.Do()'。 – 2015-02-08 18:22:29
@Asad我认为捅错了问题,就好像OP在编译时知道该类,但不知道该方法。 – 2015-02-08 18:23:40
你将不得不在整个过程中使用反射;例如:
object result = Type.GetType(typeName).GetMethod(methodName).Invoke(null, args);
见['MethodInfo.Invoke'方法](https://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.invoke(V = VS。 110)的.aspx)。 – 2015-02-08 18:20:04
你已经用反射标记了这个问题,这就是你所追求的。 – 2015-02-08 18:20:15