【发布时间】:2014-09-04 19:41:48
【问题描述】:
下面给出了我尝试返回类实例的示例代码。
public object getConstructorclass(int i)
{
if(i==1)
{
Type type = Type.GetType("test1");
}else
{
Type type = Type.GetType("test2");
}
return Activator.CreateInstance(type);
}
var objcls = getConstructorclass(1);
objcls.callclass();//error occured
我怎么能在这里提到类类型,因为类型在编译时是未知的,但它会在运行时决定。在上面的例子中,我只是传递一个值 1(它可以是任何东西,并且该类将被相应地调用) ,并调用了 test1 类。
这里我会在objcls.callclass() 行收到一个错误,因为objcls 是一个没有callclass() 方法的object 实例。
如何重构这段代码?我的目标是,如果我在 getConstructorclass() 方法中提到一个类,则应该返回一个对象,以便在进一步的代码中使用它来调用该类的成员。
【问题讨论】:
-
我能问一下你想通过这样做来完成什么吗? (顺便说一句,从你的例子中你知道类型是
test1是什么) -
小心带有
Activator的命名空间。一般来说,您应该可以执行上述操作。但是,您可以为希望动态构造的对象集提供一个基类,然后将getConstructorClass()方法的返回类型限制为该基类,使其类型安全。 -
我不能保证总是会调用 test1。更新的问题包括更好地了解我的场景。
标签: c# asp.net reflection