当您只有 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 */ });
我想知道当您仅通过字符串值知道 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 */ });