1

c# 中通过字符串变量初始化一个类?我已经知道如何使用字符串创建一个类

所以我已经拥有的是:

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);

我想做的是在这个类上调用一个函数,例如:

class.foo();

这可能吗?如果是怎么回事?

4

5 回答 5

4
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);
于 2010-12-20T16:22:54.930 回答
2

如果您可以假设该类实现了公开 Foo 方法的接口或基类,则适当地转换该类。

public interface IFoo
{
   void Foo();
}

然后在您的调用代码中,您可以执行以下操作:

var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);

yourType.Foo();
于 2010-12-20T16:25:33.010 回答
1

这是可能的,但您必须使用反射或class在运行时强制转换为正确的类型。

反射示例:

type.GetMethod("foo").Invoke(class, null);
于 2010-12-20T16:22:57.553 回答
0

Activator.CreateInstance返回一个类型object。如果您在编译时知道类型,则可以使用泛型 CreateInstance。

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
于 2010-12-20T16:24:32.317 回答
0
var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

Invoke 方法的第二个参数是方法参数。

于 2010-12-20T16:24:35.433 回答