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

Use classes static method when you only have the type name of the class as a string

我想知道当您仅通过字符串值知道 classes 名称时是否可以使用 classes 方法。

假设我有一个 class 并且在 class 中我有一个像

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

并且在使用 class 时我想要类似

string str = (GetType(SomeClass)).Do();

使用该方法时,我想将 class 的名称作为字符串提供,就像我想将 SomeClass 作为字符串提供一样。

使用Type.GetMethod to get the method info object of the method, then call MethodInfo.Invoke执行。对于静态方法,将 null 作为第一个参数(对象值)传递:

Type type = typeof(SomeClass);
type.GetMethod("Do").Invoke(null, null);

如果你在编译时不知道class名称,你也可以在运行时使用object.GetType, Type.GetType or Assembly.GetType来获取类型对象(取决于你掌握的信息)。然后,你可以用同样的方式使用它:

Type type = someObject.GetType(); // or Type.GetType("SomeTypeName");
type.GetMethod("Do").Invoke(null, null);

为了安全起见,请务必检查 GetMethod 是否确实 returns 一个方法,这样您就可以确认该方法存在于该类型上。

你将不得不自始至终使用反射;例如:

object result = Type.GetType(typeName).GetMethod(methodName).Invoke(null, args);
var t = Type.GetType("MyNamespace.SomeClass");
var m = t.GetMethod("Do");

m.Invoke(null, new object[] { /* Any arguments go here */ });