我正在使用Activator.CreateInstance动态创建一个实例。然而,它是说对象不能在每次尝试中都是空的。粘贴下面的代码。我做错什么了吗?
如果有什么问题
Activator.CreateInstance
替换常规的开关/case语句来确定运行时的对象类型?谢谢。
public abstract class Base
{
public abstract void Func();
}
public class Derived:Base
{
public override void Func()
{
MessageBox.Show("Derived First");
}
}
public class Derived2 : Base
{
public override void Func()
{
MessageBox.Show("Derived Second");
}
}
private void button1_Click(object sender, EventArgs e)
{
// I was trying to make use of the overladed version
// where it takes the Type as parameter.
BaseClass report =
(BaseClass) Activator.CreateInstance(Type.GetType("Derived"));
report.Func();
}发布于 2012-01-23 09:16:18
来自Type.GetType的Type.GetType参数的文档
要获取的类型的程序集限定名称。见AssemblyQualifiedName。如果类型位于当前正在执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名称就足够了。
这意味着您还需要(至少)传递名称空间:
BaseClass report = (BaseClass) Activator.CreateInstance(Type.GetType("YourNamespace.Derived")); 发布于 2012-01-23 09:17:02
嗯,Type.GetType("Derived")几乎可以肯定地返回null -这将使它与Activator.CreateInstance无关。
检查:
Derived吗?如果没有,请在正确的程序集上使用Assembly.GetType,或者将程序集名称包含在要传递给命名空间中的Assembly.GetType类型名称中?如果是这样,则需要命名空间--限定它为。
发布于 2012-01-23 09:18:57
Type.GetType("Derived"找不到类型
Simeple变化
BaseClass report = (BaseClass) Activator.CreateInstance(Type.GetType("Derived"));到这个
Base report = (Base)Activator.CreateInstance(typeof(Derived));https://stackoverflow.com/questions/8969268
复制相似问题