在c# 中通过字符串变量初始化一个类?我已经知道如何使用字符串创建一个类
所以我已经拥有的是:
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);
我想做的是在这个类上调用一个函数,例如:
class.foo();
这可能吗?如果是怎么回事?
在c# 中通过字符串变量初始化一个类?我已经知道如何使用字符串创建一个类
所以我已经拥有的是:
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);
我想做的是在这个类上调用一个函数,例如:
class.foo();
这可能吗?如果是怎么回事?
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);
object result = yourType.GetMethod("foo")
.Invoke(yourObject, null);
如果您可以假设该类实现了公开 Foo 方法的接口或基类,则适当地转换该类。
public interface IFoo
{
void Foo();
}
然后在您的调用代码中,您可以执行以下操作:
var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);
yourType.Foo();
这是可能的,但您必须使用反射或class
在运行时强制转换为正确的类型。
反射示例:
type.GetMethod("foo").Invoke(class, null);
Activator.CreateInstance
返回一个类型object
。如果您在编译时知道类型,则可以使用泛型 CreateInstance。
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
var methodInfo = type.GetMethod("foo");
object result = methodInfo.Invoke(class,null);
Invoke 方法的第二个参数是方法参数。