当您只将类的类型名称作为字符串时,请使用类静态方法

时间:2015-02-08 18:17:04

标签: c# reflection types casting static

我想知道当你只知道类的名字时,是否可以使用类方法。

我们说我有一个班级,在课堂上我有一个像

这样的静态方法
public class SomeClass 
{
    public static string Do()
    {
         //Do stuff
    }
}

在使用课程时我想要像

这样的东西
string str = (GetType(SomeClass)).Do();

使用方法时,我想将类的名称作为字符串给出,就像我想将SomeClass作为字符串一样。

3 个答案:

答案 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.GetTypeType.GetTypeAssembly.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);