我想知道当你只知道类的名字时,是否可以使用类方法。
我们说我有一个班级,在课堂上我有一个像
这样的静态方法public class SomeClass
{
public static string Do()
{
//Do stuff
}
}
在使用课程时我想要像
这样的东西string str = (GetType(SomeClass)).Do();
使用方法时,我想将类的名称作为字符串给出,就像我想将SomeClass作为字符串一样。
答案 0 :(得分:3)
var t = Type.GetType("MyNamespace.SomeClass");
var m = t.GetMethod("Do");
m.Invoke(null, new object[] { /* Any arguments go here */ });
答案 1 :(得分:1)
使用Type.GetMethod
获取方法的方法info对象,然后调用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
是否实际返回某个方法,以便您确认该方法是否存在于该类型中。
答案 2 :(得分:1)
你必须始终使用反射;例如:
object result = Type.GetType(typeName).GetMethod(methodName).Invoke(null, args);